2016-06-21 8 views
1

Я уже пробовал следующее: 1) Добавлен пользовательский атрибут для обработки таймаута.Как обрабатывать тайм-аут запроса в приложении ASP.NET MVC5?

public class TimeOutFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     System.Web.HttpContext.Current.GetType().GetField("_timeoutState", System.Reflection.BindingFlags.Instance | 
     System.Reflection.BindingFlags.NonPublic).SetValue(System.Web.HttpContext.Current, 1); 

     base.OnActionExecuting(filterContext); 
    } 
} 

Добавлено следующее в Global.asax

filters.Add(new TimeOutFilter()); 

использовано [TimeOutFilter] атрибут для украшения

-регулятора

2) Добавлена ​​AsyncTimeout атрибут для украшения контроллер/действие следующим образом:

[AsyncTimeout(10)] 

3) Установите исполнениеTimeout на значение в файле web.config.

<httpRuntime targetFramework="4.5" maxRequestLength="10240" executionTimeout="10" /> 

4) Установить HttpContext.Server.ScriptTimeout на некоторое значение в контроллере.

HttpContext.Server.ScriptTimeout = 10; 

Используя шаги в пункте 1, я смог перенаправить пользователя на экран входа в систему по истечении времени запроса. Но это не то, что я ищу.

Я ищу получение или запуск исключения, когда произойдет таймаут запроса.

Может кто-нибудь, пожалуйста, дайте мне знать, если мы сможем это сделать?

ответ

0

Не используйте rude thread abort behavior (1) и (4).

Атрибут AsyncTimeout (2) хорош, но просто объявляет (например, executeTimeout в web.config (3)) длительность таймаута.

В полностью асинхронном конвейере mvc5 это всего лишь один эффективный способ таймаута операции: выбросить с помощью CancellationTokens!

Вы можете получить эти жетоны по параметрам или с объектами Request.TimedOutToken и Response.ClientDisconnectedToken.

Этот blog post мне очень помог.

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

  • Нет связанных вопросов^_^