2014-02-07 57 views
1

我已經創建了新的新的asp.net mvc 3項目。然後我說在Web.config文件中的以下字符串:httpRuntime屬性在ASP.NET MVC中不起作用

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

而且在Index行動以下指令:

System.Threading.Thread.Sleep(30000); 

沉睡了30秒,我可以看到索引視圖之後。爲什麼httpRuntime屬性不起作用?我創建了一個新的測試項目,因爲在我的工作項目中,我無法通過超時實現中斷。我的工作項目正在iis上運行,iis上的Test項目正在運行。

我在做什麼錯?


我試圖從這個答案的所有東西,沒有運氣https://stackoverflow.com/a/13886618/290082

回答

2

的<的httpRuntime executionTimeout >屬性並不適用於像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

+2

另請參閱我的Async MVC文章•使用取消標記部分http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4#CancelToken – RickAndMSFT

+0

如果您不提供取消標記會怎麼樣?我想在我的所有控制器上全局應用。它是否具有全局默認設置? – TWilly