Asp.net «фоновая служба» прослушивания MSMQ не работает после остановки / запуска сайта IIS - PullRequest
3 голосов
/ 11 января 2012

Мы внедрили «фоновый сервис» в наше веб-приложение Asp.Net, которое получает сообщения от MSMQ через произвольные интервалы, не требуя HTTP-запроса для запуска приложения.Мы автоматически запускаем это веб-приложение, используя serviceAutoStartProvider .

Все работает, когда IIS изначально запускается, сервер перезагружается и так далее, мы получаем сообщения очень хорошо. НО если мы просто остановим сайт в IIS (не касаясь приложения или пула приложений), приложение прекратит получать сообщения MSMQ.И когда мы снова запускаем веб-сайт, serviceAutoStartProvider больше не вызывается, поэтому наше приложение не начинает снова прослушивать сообщения MSMQ!

Если мы выдадим HTTP-запрос к веб-приложению после того, как сайт IIS былостанавливается и запускается снова, он снова начинает прослушивать сообщения MSMQ.

  1. Не должно ли наше веб-приложение "фоновая служба" продолжать прослушивать сообщения MSMQ, даже если сайт IIS остановлен?Он не получит никаких запросов, но я думаю, что он должен продолжать работать.

  2. Что именно происходит в пуле приложений / приложений Asp.Net при остановке сайта IIS?Произошли какие-нибудь события, к которым мы можем подключиться?Пул приложений утверждает, что он «запущен» в диспетчере IIS, но в нем не выполняется код.

  3. Почему не вызывается наш serviceAutoStartProvider при повторном запуске сайта?Я считаю, что это «по замыслу», так как приложение на самом деле не остановлено.Но приложения тоже не работают, их нужно разбудить по фактическому HTTP-запросу.

Ответы [ 3 ]

2 голосов
/ 11 января 2012

Когда IIS Web App завершает работу (например, из-за отсутствия новых запросов HTTP (S) на время ожидания), домен приложения .NET (в рамках рабочего процесса пула приложений) полностью закрывается и выгружается. Это включает в себя все фоновые потоки, включая те, которые используются пулом потоков .NET.

Веб-приложение можно настроить с более длительным (или отсутствующим) тайм-аутом, тогда фоновые рабочие потоки могут продолжать обрабатывать работу.

Но лучше было бы запускать таких работников в специализированном сервисном процессе, управляемом совершенно отдельно.

Или, что еще лучше, используйте хостинг приложений IIS с WCF для создания прослушивателя MSMQ. Я понимаю, что в этом случае интеграция служб активации процессов Windows с IIS перезапустит веб-приложение, если новое сообщение будет получено после его закрытия.

0 голосов
/ 15 ноября 2013

Теперь вы можете использовать функцию «Инициализация приложения» IIS8 (и IIS7.5), более подробную информацию, включая информацию о доступности версии и использовании, можно найти по адресу:

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization

Это заменяет «Application Warm-Up Module», который больше не поддерживается, и предоставляет нам надлежащий контроль над инициализацией компонента / сервиса в «всегда работающем» сценарии.

0 голосов
/ 11 января 2012

Я бы разместил прослушиватель MSMQ в службе Windows. Зачем связывать это с IIS?

UPDATE

На самом деле я имею в виду, почему MSMQ и ASPNET объединяются в одном пуле приложений?

...