Почему мой asp.net приложение ThreadAbortException?

само-объяснительный вопрос.

Почему эта вещь пузырится в мой try catch, даже когда все в порядке?

Почему он появляется в моем журнале сотни раз?

Я знаю, что это вопрос newb, но если этот сайт собирается получить рейтинг поиска и привлечь newbs, мы должны спросить их

5 ответов

  1. Как говорили другие, это происходит, когда вы вызываете ответ.End () (происходит при вызове Response.Redirect без передачи false в качестве второго параметра). Это работает так, как задумано; обычно, если вы вызываете ответ.Перенаправление, вы хотите, чтобы перенаправление произошло немедленно. Дополнительные сведения см. здесь:

    Ответ.Перенаправление и исключение ThreadAbortException

  2. Зная , что есть (по крайней мере) три API, которые внутренне используютThread.Abort, я хотел бы ответить в более практических терминах, как разработать, что с этим делать.

    Для нас эта ошибка начала регистрироваться внезапно. Что изменилось? Мы исправили ошибку в некоторой процедуре базы данных, которая имела дело с картами сайта.

    Журналы log4net показали, что заголовок X-Forwarded-For (we are behind an NLB) был IP-адресом Googlebot, 66.249.78.x, который укрепил мою теорию об изменении карты сайта, что привело к Google, ползающему по нашему сайту более агрессивно в поисках изображений.

    Первое, что нужно было выяснить, почему только Googlebot смог вызвать эту проблему. Ни один другой клиент не запускал какой-либо путь кода Response.Redirectили что-либо еще.

    Поэтому в HttpApplication.Errorобработчике я добавил некоторый код для регистрации дополнительных подробных выходных данных со всеми заголовками, а также большинство данных в HttpResponseи HttpContextизвергал в журнал.

    Это позволило мне увидеть, что проблема заключалась в том, что Googlebot использует строку агента пользователя iPhone и, вооружившись этим, я смог найти кодовую базу для «iPhone» и придумать:

    private void CheckIPhoneAccess() { ... }
    

    И это использует перенаправление.

    Что с этим делать?

    Ну, для этой устаревшей кодовой базы не стоит исправлять все Response.Redirectвызовы, поэтому я собираюсь понизить уровень регистрации ThreadAbortExceptionдля приложения.

    Я изменю поведение мобильного искателя Googlebot, что не приведет к » лжи » о том, что наш сайт служит мобильным телефонам, так как он перенаправляет только при первом попадании, впоследствии он читает cookie и показывает изображение. Кажется, что Googlebot не кэширует этот файл cookie.

    Это не идеально, но сайт должен быть восстановлен. возможно, другой командой, использующей Scala или что-то в этом роде, поэтому с практической точки зрения я думаю, что это хороший выбор. Я добавлю комментарии и могу вернуться к этой проблеме позже, построить Response.SafeRedirectрасширение, которое инкапсулирует этот совет:

    Почему Ответ.Перенаправление вызывает систему.Нарезка резьбы.ThreadAbortException?

    Лука

  3. Причина почему ответ.Редирект даст это исключение asp.net внутренне реализуйте этот API с потоком.Аборт.)( При вызове этого метода создается специальное исключение ThreadAbortException.Это исключение не будет проглочено любым блоком catch. Он будет повторно брошен в конце каждого блока улова.