我有一个asp.net Web应用程序。它通过WCF与业务层进行通信。有一个冗长的数据库操作(需要两个小时)。这是通常的同步通话。最初我曾经获得与WCF超时相关的异常。对于这些异常,过去在UI页面中抛出异常(说“套接字超时”)。我在服务和客户端使用WCF绑定设置解决了这个问题。
现在,在(完全)一小时后,我在浏览器窗口中收到错误。即使我们的应用程序有自定义应用程序错误页面,它也不会显示自定义错误。由于UI中没有抛出异常,我认为它可能是由于ASP.Net超时而不是WCF。我也没有在事件查看器中看到任何相关的登录信息。
我可以使用哪些方法/工具来确定超时的确切原因?
broswer设置/ asp.net设置/ iis设置问题?
IE错误消息:您要查找的页面当前不可用。该网站可能遇到技术问题,或者您可能需要调整浏览器设置。 注意:在底部显示“无法找到服务器或DNS错误”
注意:此功能仅在一个月内使用一次。它是管理员的功能。所以花两个小时对我们来说没问题。
注意:我有以下WCF配置。服务(receiveTimeout =“05:30:00”)和客户端(receiveTimeout =“05:30:00”和sendTimeout =“05:30:00”)。
注意:它无法导航到我们的自定义错误页面,也不会抛出任何异常。
注意:我正在使用Visual Studio 2005进行开发。
注意:WCF是自托管进行测试的。
注意:它是WCF中的NetTCPBinding
应用程序中使用的一些配置值如下所示:
<httpRuntime maxRequestLength="20000" executionTimeout="900"/>
<forms loginUrl="Default.aspx" name=".ASPNETAUTH" protection="None" path="/" timeout="30" defaultUrl="Home.aspx">
</forms>
</authentication>
和 -
<roleManager defaultProvider="MyRoleProvider" enabled="true"
cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
<providers>
<clear/>
<add name="MyRoleProvider" type="My.AccessControl.ServiceLayer.MyRoleProvider" />
</providers>
</roleManager>
注意:我打算在IE中禁用“显示友好的HTTP错误消息”。我还计划在system.web中进行customErrors mode =“Off”以进一步测试它。
答案 0 :(得分:5)
首先,浏览器只会等待很长时间才能让Web服务器响应并开始生成响应。 IE 7/8,我相信保释60分钟后。关于IE 9的Dunno。有关详细信息,请参阅KB181050文章。 Firefox,Chrome,Safari,Opera都可能会有所不同,他们愿意等待多长时间才能确定服务器上没有。
坦率地说,我认为在决定服务器不会回答之前,等待60分钟是非常漫长的。 5分钟应该绰绰有余。如果您要求网页并且没有从服务器收到任何超过一两分钟的响应,您会假设:您通常不会假设服务器被激活并取消请求吗?
无论如何,当浏览器放弃请求时,它将关闭套接字,你将从浏览器中获得一个错误页面。你不会在服务器端看到任何东西:它仍然快乐地磨掉。不过,我假设IIS在套接字丢失时会注意到。希望在那时IIS将终止请求。
第二次,IIS本身只会等待很长时间才能确定某些事情随着请求处理而变为南方。我相信你应该得到一个例外。
为什么您希望您的用户(及其网络浏览器)在HTTP请求上等待2个多小时?
设置您的管理员应用程序,以便这些请求排队并由某种守护程序异步处理(或者生成一个线程来执行异步处理。交回某种票证,以便请求页面可以定期轮询以查看是否长时间运行的请求已经完成:此时,请回交构成请求的实际响应的任何内容。
在客户端浏览器上,通过AJAX帖子生成此类请求。让客户端javascript使用返回的票证每30秒左右轮询一次,直到请求完成。瞧!不再有浏览器超时。
答案 1 :(得分:2)
如果您可以在IIS服务器上托管它,可以尝试使用FailedRequestTracing模块。
http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/
我之前用它来解决超时问题。
答案 2 :(得分:0)
会话是否超时或(网络)应用程序在一小时点关闭?
答案 3 :(得分:0)
您最需要为WCF和ASP.net之间的通知以及AJAX实现双工服务,以便在客户端和Web服务器之间进行通知
答案 4 :(得分:0)
等待你自己描述为TWO HOUR操作的HTTP的整个概念在git-go中存在缺陷。正如其他海报所提到的,你需要重新思考你的策略。在一些排队过程中将其踢出,然后为用户提供一些方法来轮询完成,或者甚至向他们发送带有链接的电子邮件通知是一种方式。
顺其自然。