Почему рабочий поток моего порождения ASP.NET испытывает исключение ThreadAbortException во время сна? - PullRequest
7 голосов
/ 25 августа 2010

Я порождаю рабочий поток в приложении ASP.NET, работающем на Windows Server 2008, IIS 7.5. Первое, что этот рабочий поток делает, это спит в течение N секунд, а затем выполняет свою реальную работу. Во время сна перехватывается исключение ThreadAbortException.

Можете ли вы объяснить это поведение, и ваши бонусные баллы указывают мне на любые настройки IIS / ASP.NET, которые можно использовать для настройки поведения.

РЕДАКТИРОВАТЬ: Подробнее. Предложение перехватить исключение ThreadAbortException помогло мне обойти эту проблему, поэтому спасибо. Я полностью переписал формулировку этого вопроса, основываясь на том, что узнал, но все же, тот же вопрос: ПОЧЕМУ этот рабочий поток прерывается во время сна?

1 Ответ

6 голосов
/ 25 августа 2010

A ThreadAbortException происходит в вашем рабочем потоке, потому что кто-то еще назвал Thread.Abort в нем, так что, вероятно, это не было ничего, что ваш рабочий поток сделал, а скорее какая-то внешняя причина. Первое, что вы должны проверить, это ваш собственный код для любого управления потоками или прерывания, которые вы можете сделать. В противном случае для IIS это может произойти из-за перезапуска рабочего процесса (w3wp.exe) или пула приложений или домена приложения.

Переработка может быть связана с установкой тайм-аута простоя для пула приложений, регулярной запланированной перезагрузкой или триггером использования памяти / ЦП. Их можно настроить с помощью диспетчера конфигурации IIS в обозревателе серверов (на Win 2K8) или просто запустив inetmgr.exe. Согласно блогу Тесс здесь , существует ряд других причин для повторного использования AppDomain:

  • Machine.Config, Web.Config или Global.asax изменены
  • Каталог bin или его содержимое изменены
  • Количество перекомпиляций (aspx, ascx или asax) превышает ограничение определяется установка в machine.config или web.config (по умолчанию это установлено на 15)
  • Изменен физический путь к виртуальному каталогу
  • Изменена политика CAS
  • Веб-сервис перезапущен
  • (только 2.0) Подкаталоги приложений удалены

В этом посте также есть информация о том, как произошла переработка. Для начала попробуйте заглянуть в журнал событий (eventvwr.msc), чтобы узнать, есть ли какая-либо подробная информация.

Вы также можете попробовать отладить рабочий процесс напрямую. Присоедините отладчик VS к экземпляру w3wp.exe, в котором выполняется ваш код, добавьте точку останова на Thread.Abort (вам может потребоваться включить «Исходный шаг .NET Framework» в параметрах отладчика) и посмотрите, откуда происходит Abort с помощью окна стека вызовов. Это не скажет вам, почему это происходит, но, по крайней мере, вы будете знать, кто это делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...