诊断“请求超时”HttpExceptions

时间:2009-01-14 03:16:09

标签: asp.net httpexception request-timed-out

在StackOverflow上,我们每天都会看到一些“请求超时”异常。

事实:

  • 请求超时是默认的90秒
  • 仅在POST上发生
  • 发布的数据是文本,通常很小(<1KB),但可以达到几KB
  • 服务器变量中没有捕获表单数据
  • 客户UA多种多样:IE5.5 - 7,Firefox 3.0.5,iPhone,Chrome
  • 客户位置多种多样:英国,法国,美国 - NC,OH,NE,IN

我们在异常日志中测试了基于服务器的超时(即使用Thread.Sleep)和正确捕获的所有表单变量 - 这使我们相信客户端在发送问题时遇到问题请求在规定的时间内。

非常欢迎任何关于如何捕获/调试这种情况的想法!

7 个答案:

答案 0 :(得分:12)

我在使用小型AJAX Web服务的生产服务器上遇到了同样的问题。在防火墙外部进行数据包捕获后,我们发现服务的POST来自两个TCP段,第二个段从未到达我们。 (第一个数据包只包含标题,第二个丢失的数据包应该是json主体)所以基本上IIS只是坐在那里等待POST的其余部分。配置超时后,服务器向客户端发送RST数据包并记录“请求超时”错误 - 这是正确的行为。

我们试图获得一个客户端repro没有太多运气,但在我们的情况下,这似乎是完全网络相关的(或可能是一些不喜欢帖子内容的“安全”软件)。

答案 1 :(得分:9)

如果您运行的是IIS 7,则可以使用Failed Request Tracing。我实际上并没有将它用于超时,我大多数时候已将其设置为仅捕获特定的http错误代码。但我知道你可以把它丢弃任何超过X时间的请求。

答案 2 :(得分:3)

您是否尝试通过telnet手动发布并且没有完成POST。我有兴趣看看你是否可以复制你所看到的行为。考虑到网站的性质,如果你故意试图破解系统,那么我会不会感到惊讶。

有时我注意到我需要重新启动Safari,以便在某些操作挂起后让SO再次工作,但我认为这是我的问题。

答案 3 :(得分:3)

答案 4 :(得分:2)

我们曾经在我们非常高流量的网络客户端上看到了很多 - 想知道它是否相关。应该发生的是HttpWebRequest(我假设你遇到了HttpWebResponse的问题?也许他们有相同的问题)在封面下使用一些janky线程池,即使你的请求是同步的。每隔一段时间就会出现死锁,因为堆栈中较高的其他.NET对象使用相同的系统线程池,而另一个则会使另一个陷入困境,最终导致超时。我认为这里更好地描述了这个问题:http://www.deez.info/sengelha/2005/03/03/beware-threadpools-and-httpwebrequest/

答案 5 :(得分:1)

我还会扫描日志中的IP地址,看看是否有人反复出现问题。你知道,有些人可能仍在使用拨号帐户,或者他们可能还有其他网络问题。但是,当然,不要在没有尽可能多地调查的情况下将其写下来。

答案 6 :(得分:0)

从IIS6切换到IIS7后,我们遇到了与我们的网络服务器相同的“请求超时”问题。我相信这个问题是IIS7特有的。我的猜测是,在请求被移交给ASP.Net进行处理之前,这些错误在IIS6中的处理链中被进一步吞噬或忽略。我今天打开了失败的请求跟踪,看看我是否可以捕获有关该问题的更多信息。到目前为止,您对客户端原因的解释似乎最有效。