正在查找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"以进一步测试它。
首先,浏览器只需要等待很长时间,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等待您自己所描述的两小时操作的整个概念从一开始就有缺陷。正如其他海报所提到的,你需要重新思考你的策略。在一些排队的过程中启动它,然后为用户提供一些方法来轮询完成,甚至向他们发送一个带有链接的电子邮件通知,这是一种方法。
顺其自然。