При запуске метода HttpModule Init ASP.NET интегрированный режим?


Я написал HttpModule, который является поставщиком сеансов NHibernate. Он просто открывает SessionFactory в методе Init HttpModule и получает новый сеанс в BeginRequest и закрывает его в EndRequest. С другой стороны, я написал метод в Global.asax, который использует сеанс из этого HttpModule с именем GetData. Я запускаю этот метод (GetData)в методе init Global.асакс. Проблема в том, что когда я использую свой HttpModule в интегрированном режиме, кажется, что мой HttpModule не инициализируется перед запуском Init метод глобальный.асакс.

Я искал порядок запуска этих методов и жизненный цикл событий, но ничего полезного не нашел!

2 2

2 ответа:

ASP.NET не предоставляет никаких гарантий, когда методы HttpModule Init() вызываются относительно друг друга (в отличие от статических инициализаторов). В общем, методы Init () должны использоваться для подключения обработчиков событий, и любая "реальная работа" должна выполняться в обработчиках событий.

Все зарегистрированные обработчики событий для конкретного события вызываются из всех HttpModules, включая Global.asax, прежде чем перейти к следующему событию-таким образом, у вас есть контроль над порядком.

В IIS 7.x, модули и обработчики должны быть зарегистрированы в элементе system.webServer xml в вашем файле web.config.

Проверьте эту статью MSDN: