Когда метод HttpModule Init работает в интегрированном режиме ASP.NET? - PullRequest
2 голосов
/ 19 декабря 2011

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

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

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

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

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

2 голосов
/ 20 декабря 2011

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

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

...