【发布时间】:2009-07-22 01:37:59
【问题描述】:
我收到间歇性的“System.Web.HttpException:请求超时”。当我的代码到达 response.write() 行时出错:
sMessage = "Searching...0% complete."<br>
sSetVal = "<script>document.getElementById('MessageDiv').innerHTML='" & sMessage & "';</script>"<br>
Response.write(sSetVal)
请注意,Response.BufferOutput = false 在页面第一次开始执行时设置(远在上述代码执行之前)。
该代码用于在其他线程执行长时间运行的进程时更新进度消息。一个线程连续运行并检查其他线程的状态。随着其他线程完成,该线程将更新的状态消息输出给最终用户。我意识到这可以(应该)使用 ajax 重新编码,但它是一个遗留应用程序,目前不是一个选项。
此代码每天运行 10,000 多次,并且错误仅发生大约 5 次 - 所以我怀疑响应对象在网站繁忙时被其他线程阻塞。但是,我不知道要在性能监视器中检查哪些性能计数器。还是这个问题是由其他原因引起的?我正在使用 IIS 6、asp.net v2 和 vb.net
【问题讨论】:
-
请通过捕获异常然后发布 ex.ToString() 发布完整的异常,包括所有 InnerException。
-
感谢您的快速回复。到目前为止,我只是在 Application_Error 子中使用:
Server.GetLastError().ToString()。并且此错误的输出仅为System.Web.HttpException: Request timed out。所有其他错误都有完整的调用堆栈,但不是这个。我已将 .InnerException 添加到我的错误报告中,我会看看还有什么报告。我一直在将当前位置转储到 Session 对象,然后在发生错误时检查它。这就是我知道它在没有完整调用堆栈的情况下在 response.write 上失败的方式。 -
OK - 错误又发生了。内部异常为空白。唯一的错误消息是“System.Web.HttpException:请求超时”。从 Server.GetLastError().ToString().