2016-06-21 6 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の

contoller

2を飾るために[TimeOutFilter]属性を使用し

filters.Add(new TimeOutFilter()); 

に後に添加)を次のようにコントローラ/アクションを飾るために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の完全非同期パイプラインでは、操作をタイムアウトさせる効率的な方法の1つに過ぎません。CancellationTokens

これらのトークンは、パラメータまたはRequest.TimedOutTokenおよびResponse.ClientDisconnectedTokenプロパティで取得できます。

このblog postは私を大いに助けました。

関連する問題