【问题标题】:executionTimeout not working on asp.net mvcexecutionTimeout 在 asp.net mvc 上不起作用
【发布时间】:2011-04-29 11:24:30
【问题描述】:

我尝试在 web.config 中为 asp.net mvc 应用程序设置 executionTimeout。

<location path="Home/Index">
    <system.web>
      <httpRuntime  executionTimeout="5"/>
    </system.web>
  </location>

任何人在索引操作中使用了Thread.Sleep

public ActionResult Index()
{
    Thread.Sleep(30000);            
    return View();
}

另外,我将编译的调试设置为“false”。 动作休眠约 30 秒后,“请求超时”异常未抛出,视图已成功呈现。

有人知道如何让 executionTimeout 在 asp.net mvc 中工作吗?

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

您需要满足以下条件:

  1. 域名不是 localhost(要测试超时,您应该使用“YourComputerName”而不是“localhost”)。
  2. 项目在发布模式下编译。
  3. &lt;compilation debug="false"&gt;

然后,想想这个:

ASP.NET 在内部使用 Timer 来调用请求取消过程。此计时器每 15 秒触发一次,因此如果将 executionTimeout 设置为 3 秒,则实际上请求可以在 3 秒到 18 秒之间的任何时间超时。

当定时器被触发时,ThreadPool 中的一个线程用于检查所有请求。通过在执行请求的线程上调用 Abort,向已超时的线程发送 ThreadAbortException

注意:请记住,ThreadAbortException 只能被托管代码观察到。因此,如果您的线程正在调用一些非托管函数,则线程不会被中止,因此不会强制执行超时,直到执行返回到托管世界。这可以是任意长度的延迟,具体取决于那些非托管代码的作用。

阅读更多:http://consultantpoint.wordpress.com/2012/09/07/how-the-execution-timeout-is-managed-in-asp-net/

【讨论】:

    【解决方案2】:

    如果您将 web.config 设置为 debug="true",它将忽略您设置的值: http://msdn.microsoft.com/en-us/library/e1f13641.aspx

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2011-05-28
      • 2010-11-25
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      相关资源
      最近更新 更多