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