Тема прерывается

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

Ответ 6

Заменить Response.End() С помощью HttpContext.Current.ApplicationInstance.CompleteRequest();