正在查找ASP.网络超时原因(在长时间操作期间)

本文关键字:操作 长时间 ASP 查找 网络 超时 | 更新日期: 2023-09-27 17:59:44

我有一个asp.net web应用程序。它通过WCF与业务层通信。数据库操作很长(需要两个小时)。这是一个常见的同步调用。最初,我经常获取与WCF超时相关的异常。对于这些异常,UI页面中曾经抛出一个异常(称为"套接字超时")。我使用服务和客户端中的WCF绑定设置解决了此问题。

现在,(整整)一个小时后,我在浏览器窗口中出现错误。即使我们的应用程序有一个自定义的应用程序错误页面,它也不会显示自定义的错误。由于UI中没有抛出异常,我认为这可能是由于ASP。Net超时而不是WCF。我也没有看到任何相关的登录事件查看器。

我可以使用哪些方法/工具来确定超时的确切原因

是broswer设置/asp.net设置/Is设置问题吗

IE错误消息:您正在查找的页面当前不可用。网站可能遇到技术问题,或者您可能需要调整浏览器设置。注意:底部写着"找不到服务器或DNS错误"

注意:此功能仅在一个月内使用一次。这是管理员的一项功能。所以花两个小时对我们来说没问题。

注意:我有以下WCF配置。服务(receiveTimeout="05:30:00")和客户端(receiveTimeout="05:30:00"和sendTimeout="05:30:0")。

注意:它无法导航到我们的自定义错误页面,也不会引发异常。

注意:我使用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"以进一步测试它。

正在查找ASP.网络超时原因(在长时间操作期间)

首先,浏览器只需要等待很长时间,web服务器就会做出响应并开始生成响应。IE 7/8,我相信60分钟后保释。不知道IE 9。详见KB181050文章。Firefox、Chrome、Safari和Opera在决定服务器上没有之前,他们愿意等待的时间可能会有所不同。

坦率地说,在决定服务器不应答之前,我认为60分钟的等待时间太长了。5分钟应该绰绰有余。如果你请求一个网页,但在一两分钟以上没有收到服务器的任何响应,你会怎么想:你通常不会认为服务器已经瘫痪并取消了请求?

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

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

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

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

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

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

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

我以前用过它来解决超时问题。

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

您最好需要在WCF和ASP.net之间实现双向通知服务,在客户端和web服务器之间实现AJAX通知

通过HTTP等待您自己所描述的两小时操作的整个概念从一开始就有缺陷。正如其他海报所提到的,你需要重新思考你的策略。在一些排队的过程中启动它,然后为用户提供一些方法来轮询完成,甚至向他们发送一个带有链接的电子邮件通知,这是一种方法。

顺其自然。