【问题标题】:httpRuntime attribute doesn't work in ASP.NET MVChttpRuntime 属性在 ASP.NET MVC 中不起作用
【发布时间】:2014-02-13 07:17:45
【问题描述】:

我创建了全新的 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 上运行,Test 项目在 iis express 上运行。

我做错了什么?


我尝试了这个答案中的所有东西,但没有运气https://stackoverflow.com/a/13886618/290082

【问题讨论】:

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


    【解决方案1】:

    属性不适用于 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

    【讨论】:

    • 另见我的异步 MVC 文章,•使用取消令牌部分asp.net/mvc/tutorials/mvc-4/…
    • 如果您不提供取消令牌怎么办?我想在我所有的控制器上全局应用它。它有全局默认设置吗?
    猜你喜欢
    • 2015-05-13
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多