C# 查找ASP.Net超时原因(在长时间操作期间)

C# 查找ASP.Net超时原因(在长时间操作期间),c#,.net,asp.net,wcf,iis,C#,.net,Asp.net,Wcf,Iis,我有一个asp.net web应用程序。它通过WCF与业务层通信。数据库操作很长(需要两个小时)。这是一个常见的同步调用。最初,我常常得到与WCF超时相关的异常。对于这些异常,UI页面中通常会抛出一个异常(称为“套接字超时”)。我使用服务和客户端中的WCF绑定设置解决了这个问题 现在,一个小时后,我在浏览器窗口中发现错误。即使我们的应用程序有一个自定义应用程序错误页面,它也不会显示自定义错误。由于UI中并没有引发异常,我假设这可能是由于ASP.Net超时而不是WCF造成的。我在事件查看器中也没有

我有一个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”)

注意:它无法导航到自定义错误页,并且不会引发异常

注意:我正在使用VisualStudio2005进行开发

注意:WCF是自托管的,用于测试

注意:它在WCF中是绑定的

应用程序中使用的一些配置值如下所示:

<httpRuntime maxRequestLength="20000" executionTimeout="900"/>


及-

<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”以进一步测试它。

如果可以在IIS服务器上托管它,可以尝试使用FailedRequestTracing模块


我以前曾使用它来排除超时故障。

会话是否超时,或者(web)应用程序是否会在一小时内关闭?

首先,浏览器只会等待web服务器响应并开始生成响应。我相信60分钟后保释。对IE 9一无所知。有关详细信息,请参阅文章。Firefox、Chrome、Safari和Opera都可能会在决定服务器上是否存在漏洞之前等待多长时间

坦白地说,我认为在决定服务器不应答之前等待60分钟是非常长的。5分钟应该足够了。如果您请求一个网页,但在一两分钟内没有收到服务器的任何响应,您会怎么想:您通常不会假设服务器出现故障并取消请求吗

无论如何,当浏览器放弃请求时,它将关闭套接字,您将从浏览器中获得一个错误页面。你在服务器端看不到任何东西:它仍在愉快地磨合着。不过,我假设IIS在套接字断开时会注意到。希望到那时IIS会终止请求

其次,IIS本身只需要等待很长时间,就可以确定请求处理出现了问题。我相信你应该得到一个例外

你到底为什么希望你的用户(和他们的web浏览器)在等待HTTP请求的过程中等待2个多小时

设置你的管理应用程序,这样像这样的请求就可以排队,并由某种守护进程异步处理(或者生成一个线程来进行异步处理。返回某种类型的票证,以便请求页面可以定期轮询以查看长时间运行的请求是否已完成:此时,返回构成请求实际响应的内容


在客户端浏览器上,通过AJAX post生成这样的请求。让客户端javascript使用返回的票证每隔30秒左右轮询一次,直到请求完成。瞧!不再出现浏览器超时。

您最好实现WCF和ASP.net之间的双工通知服务,以及客户端和客户端之间的AJAX通知服务d web服务器

从git开始,通过HTTP等待两小时操作的整个概念就有缺陷。正如其他海报所提到的,你需要重新思考你的策略。在一些排队过程中开始,然后为用户提供一些方法来轮询完成情况,甚至向他们发送ema带有链接的il通知是一种方式


按照流程进行。

考虑将其分为一个单独的进程。web请求不允许存在2小时……这是如何在iis中托管的?还是在开发服务器中?如果它在iis中,可能会检查您的连接超时设置。您是否使用不同的浏览器获得相同的结果?这种情况仅每月发生一次。这是管理员的一项功能r、 所以两个小时对我们来说是可以的。目前它在开发服务器中。[很好的一点..我会用chrome测试它。无论如何我不认为它是特定于浏览器的]当然,我会尽最大努力用FailedRequestTracing进行测试。同时,你能不能建议一些配置值,我可以在其中查找潜在问题(可能是1小时的默认设置)?
<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>