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つの選択肢があります。
Server.Transfer
を再実行するServer.Transfer
を実行するようにしてください(推奨)EDIT:スクラッチ、 http://support.Microsoft.com/kb/312629 には他にもいくつかの提案があります試してみてください。ただし、上記の#2をお勧めします。
これを解決する別の方法は、生成されたエラーをキャッチし、再スローしないことです。
catch (ThreadAbortException)
{
}
この問題は、Response.RedirectメソッドとServer.Transferメソッドで発生します。両方のメソッドが内部でResponse.Endを呼び出すためです。
この問題の解決策は次のとおりです。
Server.Transferの場合は、代わりにServer.Executeメソッドを使用します。
ダウンロードサンプルの例については、このリンクにアクセスしてください。 http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html
Caling Server.Transferは、常にThreadAbortExceptionをスローするResponse.Endを呼び出します。これは「特別な」例外です。これは、catchブロックでキャッチできますが、catchブロックの最後に常に再スローされるためです。エラーロギングでThreadAbortExceptionsを無視します。
Response.End()
をHttpContext.Current.ApplicationInstance.CompleteRequest();
に置き換えます
Response.End()を次のように置き換えると、問題の修正に役立ちました。
Response.Flush(); Response.Close();