Вопрос относительно IHttpModule.Dispose и Application_End - PullRequest
9 голосов
/ 14 июля 2011

Я только что прочитал это сообщение "Когда вызывается метод IHttpModule.Dispose?" Я обнаружил это

"Метод Dispose выполняет все действия по окончательной очистке перед удалениеммодуль из конвейера выполнения. "

, что означает, что он распространяется на все приложения.

Все нормально.В любом случае, попробовав самостоятельно, я обнаружил, что использование метода IHttpModule Dispose и обработчика события для Application.Disposed должно быть почти одинаковым.Первое происходит сразу после второго.

Я не чувствую, что это на 100% правильно, т.е. IHttpModule.Dispose не всегда сопровождается Application_End.Допустим, у меня есть несколько экземпляров объекта Application, запущенных для моего приложения, что означает, что каждый экземпляр объекта Application будет иметь отдельные экземпляры модулей внутри него.Теперь давайте предположим, что придет время, когда пул приложений заполнится экземплярами приложений, что будет потом?Не будет ли начаться удаление экземпляров приложения по одному, и в цепочке будут расположены модули внутри экземпляра приложения.Теперь это избавление от модуля не означает, что Application_End будет срабатывать после этого.Приложение все еще работает.Я прав?

Ответы [ 2 ]

9 голосов
/ 14 июля 2011

Да.

HttpModules для каждого HttpApplication. Вопреки тому, что предлагает его название, метод Application_End в global.asax НЕ запускается в конце времени жизни каждого HttpApplicaton. Он запускается в конце времени жизни ВСЕХ HttpApplications в текущем домене приложений (когда домен приложений разрушается). То же самое верно для метода Application_Start.

0 голосов
/ 15 июля 2011

Существует только 1 экземпляр объекта приложения на приложение. Есть много объектов сеанса, каждый из которых имеет дело с запросами или ожидает повторной обработки.

Пул приложений не будет заполнен объектами приложений, поскольку на одно приложение приходится только 1. Если в пуле приложений размещено более 1 приложения, их будет много, и повторная их обработка приведет к их уничтожению. Пулы приложений также имеют мониторинг работоспособности, который перезапустит процесс после определенного количества запросов / использования памяти. в этом случае существующие сеансы остаются умирать, а новое приложение запускается для обработки новых запросов. когда все сеансы в старом приложении не работают, это приложение разрывается.

Подробнее см. MSDN .

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