2014-02-07 3 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 express.

Что я делаю неправильно?


Я попробовал все вещи из этого ответа не повезло 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

Смежные вопросы