質問

Server.Transfer を使用しています。すべて正常に動作しますが、例外ログには次の例外が表示されます。

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
   at System.Web.HttpServerUtility.Transfer(String path)

上記の例外を回避するためのアイデア。

役に立ちましたか?

解決

この例外は、現在のメソッドの実行を停止するために、 Server.Transfer の呼び出しによってスローされます。 Response.Redirect を実行すると、まったく同じことがスローされます。 >。

2つの選択肢があります:

  • キャッチして再スロー ThreadAbortException /再実行 Server.Transfer
  • あなたが 場所でのみ Server.Transfer を実行する キャッチされない場所(推奨)

編集:スクラッチ、 http://support.microsoft.com/ kb / 312629 には他にもいくつかの提案がありますが、上記の#2をお勧めします。

他のヒント

これを解決する別の方法は、生成されたエラーをキャッチし、再スローしないことです。

        catch (ThreadAbortException)
        { 
        }

Caling Server.Transferは、常にThreadAbortExceptionをスローするResponse.Endを呼び出します。これは「特別」です例外は、キャッチブロックでキャッチできますが、キャッチブロックの最後に常に再スローされるためです。エラーログにThreadAbortExceptionsを無視させます。

この問題は、Response.RedirectメソッドとServer.Transferメソッドで発生します。両方のメソッドが内部でResponse.Endを呼び出すためです。

この問題の解決策は次のとおりです。

Server.Transferの場合は、代わりにServer.Executeメソッドを使用します。

サンプルのダウンロード例については、このリンクをご覧ください。 http://jayeshsorathia.blogspot.com/2012 /03/thread-was-being-aborted-error-occured.html

Response.End()を次のように置き換えると、問題の修正に役立ちました。

Response.Flush(); Response.Close();

Refererを使用してください。 Response.End()

Response.End() HttpContext.Current.ApplicationInstance.CompleteRequest();に置き換えます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top