在StackOverflow上,我们每天都会看到一些"请求超时"异常.
事实:
请求超时是默认的90秒
仅在POST上发生
发布的数据是文本,通常很小(<1KB),但可以达到几KB
服务器变量中未捕获表单数据
客户UA是多种多样的:IE5.5 - 7,Firefox 3.0.5,iPhone,Chrome
客户位置多种多样:英国,法国,美国 - NC,OH,NE,IN
我们已经测试了基于服务器的超时(即使用Thread.Sleep),并且在异常日志中正确捕获了所有表单变量 - 这使我们相信客户端在分配的时间内发送请求时遇到问题.
关于如何捕获/调试这种情况的任何想法都是非常受欢迎的!
我在使用小型AJAX Web服务的生产服务器上遇到了同样的问题.在防火墙外部进行数据包捕获后,我们发现服务的POST来自两个TCP段,第二个段从未到达我们.(第一个数据包只包含标题,第二个丢失的数据包应该是json主体)所以基本上IIS只是坐在那里等待POST的其余部分.配置超时后,服务器向客户端发送RST数据包并记录"请求超时"错误 - 这是正确的行为.
我们试图在没有太多运气的情况下获得客户端repro,但在我们的情况下,这似乎是完全与网络相关的(或者可能是一些不喜欢帖子内容的"安全"软件).
如果您运行的是IIS 7,则可以使用" 失败的请求跟踪".我实际上并没有将它用于超时,我大多数时候已将其设置为仅捕获特定的http错误代码.但是我知道你可以把它转移到超过X时间的任何请求的痕迹.