httpRuntime属性在ASP.NET MVC中不起作用

时间:2014-02-07 11:16:30

标签: asp.net-mvc web-config timeout

我创建了全新的asp.net mvc 3项目。然后我在Web.config文件中添加了以下字符串:

<compilation debug="false" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5" executionTimeout="1"/>

以及Index行动中的以下说明:

System.Threading.Thread.Sleep(30000);

睡了30秒后,我可以看到索引视图。为什么httpRuntime属性不起作用?我创建了一个新的测试项目,因为我无法在我的工作项目中实现超时。我的工作项目在iis上运行,而iis express上的测试项目正在运行。

我做错了什么?


我尝试了这个答案的所有内容而没有运气https://stackoverflow.com/a/13886618/290082

1 个答案:

答案 0 :(得分:2)

&lt; httpRuntime executionTimeout&gt;属性不适用于ASP.NET MVC之类的异步框架。相反,应该使用像CancellationToken这样的合作取消机制。这是一个例子:

[AsyncTimeout(30000 /* 30 seconds */)]
public ActionResult YourMethod(..., CancellationToken token) {
  // perform some long-running work
  while (StillNeedToPerformWork()) {
    DoSomeWork();
    token.ThrowIfCancellationRequested();
  }
  return ...;
}

我相信上面的例子需要 MVC 4 或更高版本。 MVC框架将自动读取[AsyncTimeout]属性并提供正确的CancellationToken实例作为操作方法的参数。

有关如何使用代码中的CancellationToken的详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd997364(v=vs.110).aspx