executionTimeout无法在asp.net mvc上运行

use*_*415 9 asp.net-mvc

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

<location path="Home/Index">
    <system.web>
      <httpRuntime  executionTimeout="5"/>
    </system.web>
  </location>
Run Code Online (Sandbox Code Playgroud)

任何在Index动作中使用Thread.sleep

public ActionResult Index()
        {
            Thread.Sleep(30000);            
            return View();
        }
Run Code Online (Sandbox Code Playgroud)

另外,我将complilation的调试设置为"false".在操作休眠约30秒后,"请求超时"异常不会抛出并且视图已成功呈现.

任何人都知道如何使executionTimeout在asp.net mvc中工作?

Jan*_*nen 9

您需要满足以下条件:

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

然后,想一想:

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

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

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

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


小智 1

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