我有一个Web应用程序,其功能需要一段时间才能运行,将近半个小时。
但是10分钟后(并且总是10分钟)页面变为空白,并且没有错误消息或任何内容。
我尝试通过IIS从Web服务器运行相同的页面,它运行正常。只有当我在服务器外运行时才发生这种情况......
任何人都知道为什么这可能是hapenning?
由于
答案 0 :(得分:2)
在Web应用程序中拥有一个长时间运行的进程来阻止HTTP请求的响应并不是最好的方案。如果Web服务器在“合理”的时间内没有响应,大多数Web浏览器都会认为Web服务器出了问题。
您最好的解决方案是关闭异步线程来完成您的工作并将页面返回给用户。这绝不是一个简单的解决方案,因为它提出了一些您通常不必担心的问题,例如错误处理和IIS由于请求管道中的不活动而导致工作进程被终止。但是,ASP.Net中有很多关于运行后台进程的信息。
我通过谷歌搜索找到了一些快速的结果:
http://forums.asp.net/p/1244439/2282626.aspx#2282626
http://flimflan.com/blog/SafelyRunningBackgroundThreadsInASPNET20.aspx
http://www.developerfusion.com/article/4272/net-threading-part-ii/6/
答案 1 :(得分:0)
可能是浏览器放弃/超时还是操作系统切断了连接?
答案 2 :(得分:0)
如果您尝试使用Visual Studio的内置开发服务器执行页面, 你可以尝试修改
c:\Program Files (x86)\Common Files\microsoft shared\DevServer\10.0\WebDev.WebServer40.exe.config
或类似的通过在配置节点下添加以下内容:
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="3600"/>
</system.web>
答案 3 :(得分:0)
我正在研究一些难以重构的遗留项目遇到同样的问题,它需要运行30分钟,因为我们将服务器移动到VM,没有机构愿意修复VM问题所以我被要求找到解决方案而我发现使用 Reponse.Flush 可以解决这个问题。
超时是来自浏览器,因为他们无法从网络服务器获取任何响应数据很长一段时间,所以浏览器退出等待,但如果你添加 Response.Flush 即使在最开始它将http标头刷新到客户端,这使得浏览器确实知道服务器处于活动状态,因此浏览器将继续等待更多数据的到来。
是的,我知道这不是一个好习惯,我们应该像杰伊提到的那样做,但如果你有人站在后面继续推动你要求快速解决它,那么先试试。