Когда IIS перезапускает веб-приложение ASP.Net (2.0), он может:
- Переработайте домен приложения: выгрузите домен приложения и загрузите новый домен приложения в том же процессе (например, когда вызывается
HttpRuntime.UnloadAppDomain()
, когда изменяется web.config). - Повторное использование процесса: выгрузите домен приложения и загрузите новый в новый процесс (например, при вызове команды «Повторное использование» в пуле приложений через inetmgr или при достижении предела памяти).
По некоторым внутренним причинам (проблемы с устаревшим нативным кодом, от которого мы зависим), мы не можем позволить первый вариант. Мы просто не можем загрузить приложение дважды в одном и том же процессе.
Можно ли каким-то образом сказать IIS, чтобы он никогда не разрешал повторное использование рабочего процесса?
Я сам пытался предотвратить это, отслеживая, запускалось ли приложение в процессе один раз с использованием Mutex, и если да, то генерируя исключение во время Application_Start()
); Я также пробовал завершить процесс, вызвав Environment.Exit()
во время Application_End()
. Проблема с обоими методами заключается в том, что они приводят к сбою любых запросов, поступающих во время Application_End или Application_Start (в отличие от ручного перезапуска процесса, при котором не происходит абсолютно никаких сбоев запросов, потому что они сразу же перенаправляются на новый процесс).