Тема прерывается
Я использую 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)
Любая идея избежать исключения.
Ответы
Ответ 1
Это исключение вызывается вызовом Server.Transfer
, чтобы остановить выполнение текущего метода - точно так же получается, если вы сделаете Response.Redirect
.
У вас есть два варианта:
- Поймать и вернуть
ThreadAbortException/регенерировать
Server.Transfer
- Убедитесь, что вы
делать только
Server.Transfer
местами
где он не будет пойман (рекомендуется).
РЕДАКТИРОВАТЬ: Поцарапать, что http://support.microsoft.com/kb/312629 содержит несколько других предложений, но я по-прежнему рекомендую # 2 выше.
Ответ 2
Caling Server.Transfer вызовет Response.End, который всегда генерирует исключение ThreadAbortException. Это "специальное" исключение, потому что, хотя его можно поймать в блоке catch, он всегда будет перебрасываться в конец блока catch. Я бы проверил ваш журнал ошибок игнорировать ThreadAbortExceptions.
Ответ 3
Эта проблема возникает в методах Response.Redirect и Server.Transfer, потому что оба метода вызывают Response.End внутри.
Решение этой задачи выглядит следующим образом.
Для Server.Transfer вместо этого используйте метод Server.Execute.
Посетите эту ссылку для примера примера загрузки. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html
Ответ 4
Другой способ решить эту проблему - уловить сгенерированную ошибку и не реконструировать ее:
catch (ThreadAbortException)
{
}
Ответ 5
Замена Response.End() следующим образом помогла устранить проблему.
Response.Flush,();
Response.Close();
Обратитесь Можем ли мы использовать Response.Flush() вместо Response.End()
Ответ 6
Заменить Response.End()
С помощью HttpContext.Current.ApplicationInstance.CompleteRequest();