【问题标题】:"System.Web.HttpException: Request timed out." errors on Response.write“System.Web.HttpException:请求超时。” Response.write 上的错误
【发布时间】:2009-07-22 01:37:59
【问题描述】:

我收到间歇性的“System.Web.HttpException:请求超时”。当我的代码到达 response.write() 行时出错:

sMessage = "Searching...0% complete."<br>
sSetVal = "&lt;script>document.getElementById('MessageDiv').innerHTML='" & sMessage & "';&lt;/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().

标签: asp.net vb.net iis-6


【解决方案1】:

您是否尝试过将Response.BufferOutput = false 移到Response.Write 之前?

我会尝试监控内存使用和 GC2 收集的性能计数器。

【讨论】:

  • 声明 Response.BufferOutput = false 只是为了显示值的状态 - 它是在执行开始时设置的。我也试过 Response.BufferOutput = true,然后在下一个 Response.Flush() 语句中超时。
  • 好的,我已经移动了 Response.BufferOutput = false 以使其更清晰。
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多