【发布时间】:2011-06-21 17:57:04
【问题描述】:
我有一个 asp.net 网络应用程序。它通过 WCF 与业务层通信。有一个冗长的数据库操作(需要两个小时)。这是一个通常的同步调用。最初,我曾经获得与 WCF 超时相关的异常。对于这些异常,曾经在 UI 页面中抛出异常(说“Socket Timeout”)。我在服务和客户端中都使用 WCF 绑定设置解决了这个问题。
现在,(恰好)一小时后,我在浏览器窗口中收到错误消息。即使我们的应用程序有一个自定义应用程序错误页面,它也没有显示自定义错误。由于 UI 中没有抛出异常,我认为这可能是由于 ASP.Net 超时而不是 WCF。我也没有在事件查看器中看到任何相关的日志。
我可以使用哪些方法/工具来确定超时的确切原因?
是浏览器设置/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” 以进一步测试它。
【问题讨论】:
-
考虑将它分成一个单独的进程,一个 web 请求不会存活 2 小时......
-
这是如何在 iis 中托管的?还是开发服务器?如果它在 iis 中,可能会检查您的连接超时设置
-
用不同的浏览器得到同样的结果吗?
-
这种情况每月只发生一次。这是管理员的功能。所以两个小时对我们来说是可以的。目前它在开发服务器中。 [好点..我会用 chrome 测试它。无论如何,我认为它不是特定于浏览器的]