Тема была прервана - PullRequest
       7

Тема была прервана

31 голосов
/ 16 сентября 2009

Я использую 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)

Любая идея, чтобы избежать выше исключения.

Ответы [ 6 ]

40 голосов
/ 16 сентября 2009

Это исключение вызывается вызовом Server.Transfer для остановки выполнения текущего метода - точно так же выдается, если вы делаете Response.Redirect.

У вас есть два варианта:

  • Поймай и отбрось ThreadAbortException / reperform Server.Transfer
  • Убедитесь, что вы делать только Server.Transfer местами где его не поймают (рекомендуется)

РЕДАКТИРОВАТЬ: Поцарапайте, что http://support.microsoft.com/kb/312629 есть несколько других предложений, но я все еще рекомендую # 2 выше.

9 голосов
/ 15 января 2013

Другой способ решить эту проблему - перехватить сгенерированную ошибку и не сбрасывать ее:

        catch (ThreadAbortException)
        { 
        }
8 голосов
/ 23 апреля 2012

Эта проблема возникает в методах Response.Redirect и Server.Transfer, поскольку оба метода вызывают Response.End внутри.

Решение этой проблемы заключается в следующем.

Для Server.Transfer, используйте взамен метод Server.Execute.

Посетите эту ссылку для примера загрузки. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

8 голосов
/ 16 сентября 2009

Caling Server.Transfer вызовет Response.End, который всегда вызывает исключение ThreadAbortException. Это «особое» исключение, потому что, хотя оно может быть перехвачено в блоке перехвата, оно всегда будет переброшено в конце блока перехвата. Я хотел бы, чтобы ваша регистрация ошибок игнорировала ThreadAbortExceptions.

0 голосов
/ 11 февраля 2017

Заменить Response.End() на HttpContext.Current.ApplicationInstance.CompleteRequest();

0 голосов
/ 11 августа 2016

Замена Response.End () на следующую помогла решить проблему.

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

См. Можем ли мы использовать Response.Flush () вместо Response.End ()

...