-
07-07-2019 - |
题
我在用 服务器传输. 。一切正常,但异常日志显示以下异常。
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
.
您有两个选择:
- 捕获并重新抛出
ThreadAbortException / 重新执行
Server.Transfer
- 确保您
只做
Server.Transfer
在某些地方 不会被抓住的地方(推荐)
编辑: 划开那个, http://support.microsoft.com/kb/312629 还有一些其他建议可以尝试,但我仍然推荐上面的#2。
其他提示
解决此问题的另一种方法是捕获生成的错误,而不是重新抛出它:
catch (ThreadAbortException)
{
}
Caling Server.Transfer将调用Response.End,它始终抛出ThreadAbortException。这是一种“特殊”的异常,因为虽然它可以在catch块中捕获,但它总是会在catch块的末尾重新抛出。我会让你的错误记录忽略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();
使用 HttpContext.Current.ApplicationInstance.CompleteRequest();
Response.End()