2016-06-21 9 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) executionTimeout을 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)은 좋지만 (web.config (3)의 executionTimeout과 같이) 시간 초과 기간을 선언하기 만하면됩니다.

mvc5의 완전 비동기식 파이프 라인은 작업을 시간 초과하는 효율적인 방법 중 하나입니다. CancellationTokens!

매개 변수 또는 Request.TimedOutTokenResponse.ClientDisconnectedToken 속성을 사용하여 이러한 토큰을 얻을 수 있습니다.

blog post은 많은 도움이되었습니다.