ASP.Net httpruntime executionTimeout不起作用(并且是debug = false)怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

我们刚刚注意到executionTimeout已停止在我们的网站上工作。这绝对有效〜去年......当它停止时很难说。

我们目前正在运行:

  • Windows的2008x64
  • IIS7
  • 32位二进制文​​件
  • 管理流水线模式=经典
  • Framework版本= v2.0

Web.Config有

<compilation defaultLanguage="vb" debug="false" batch="true">
<httpRuntime executionTimeout="90" />

关于为什么我们看到Timetaken一直持续到20分钟的任何暗示。DebugType(完整版与普通版)的编译选项有什么作用?

datetime       timetaken httpmethod Status  Sent    Received<BR>
12/19/10 0:10  901338    POST       302 456 24273<BR>
12/19/10 0:18  1817446   POST       302 0   114236<BR>
12/19/10 0:16  246923    POST       400 0   28512<BR>
12/19/10 0:12  220450    POST       302 0   65227<BR>
12/19/10 0:22  400150    GET        200 180835  416<BR>
12/19/10 0:20  335455    POST       400 0   36135<BR>
12/19/10 0:57  213210    POST       302 0   51558<BR>
12/19/10 0:48  352742    POST       302 438 25802<BR>
12/19/10 0:37  958660    POST       400 0   24558<BR>
12/19/10 0:06  202025    POST       302 0   58349<BR>
提问于
用户回答回答于

我有一个理论,但我不知道如何证明它。我做了类似于cbcolin的事情,并记录了请求从BeginRequest事件处理程序中开始的时间。然后,当请求超时(在我们的情况下1小时后),它会记录在数据库中并记录一个时间戳。

所以这里是理论:ASP.NET只计算线程实际正在执行的时间,而不是它睡着的时间。

所以在BeginRequest线程进入休眠状态之后,直到整个POST正文被IIS接收。然后,线程被唤醒,executionTimeout开始工作,时钟开始运行。所以在网络传输阶段花费的时间不计算在内executionTimeout。最终网站连接超时被击中,IIS关闭连接,导致ASP.NET中出现异常。

BeginRequest甚至在POST主体传输到Web服务器之前PreRequestHandlerExecute都会被调用。然后,在请求处理程序被调用之前有很长的差距。所以它可能看起来像.NET有30分钟的请求,但线程没有运行那么久。

我将开始记录请求处理程序实际开始运行的时间,并查看它是否超出了我设置的限制。

现在,为了控制一个请求可以在每个URL的基础上保持这样的传输阶段多长时间,我不知道。在全球范围内,我们可以在webLimits中为应用程序设置minBytesPerSecond 。没有可以找到的用户界面。这将在传输阶段引发超低速客户端的攻击。

这仍然不能解决实际发送数据的DoS攻击问题。

用户回答回答于

执行超时和耗时两个不同的事情。尽管差异的大小令人不安。

所花时间包括请求/响应中的所有网络时间(在某些情况下)。网络传输时间很容易超过请求真正需要的时间。虽然,通常情况下,我习惯了几分钟而不是几分钟。

执行超时只涉及工作进程处理请求的时间量; 这只是时间的一个子集。它只适用于debug属性设置为false的情况 ; 它看起来像你有。

当然,假设列出的第一个请求花费了全部90秒的允许超时时间,但仍然在离开时间为13.5分钟的时间窗口内传输大量24k的数据。这听起来像是一个严重的网络问题。

因此,无论是否有严重的传输问题,或者在正在处理请求的树中的某个位置存在另一个web.config文件,该文件会将调试设置为true或将执行超时增加到某种天文数字。

另一种可能性是页面本身具有调试属性集或它自己的超时值。

扫码关注云+社区