Почему обработчики событий могут привязываться только к событиям HttpApplication во время инициализации IHttpModule?

Это просто еще один вопрос "работа на сервере dev, почему бы не работать в IIS".

Я создал хороший DAL, используя NHibernate как описанный здесь. При создании ISession я подключаю обработчик событий к HttpApplication.EndRequest, чтобы позаботиться о его очистке.

Однако я развернул свой сайт в IIS, и он говорит:

Обработчики событий могут привязываться только к событиям HttpApplication во время инициализации IHttpModule.

Я полностью понимаю, что говорится в сообщении, но я не могу его остановить.

Я могу подписаться на событие Button в любое время, почему я не могу подписаться на событие HttpApplication?

Я был бы очень благодарен, если бы кто-то мог пролить свет на это.

И я также задаюсь вопросом, почему он работает с сервером разработки, а не с IIS 7?

EDIT: Теперь, когда прошло два месяца, я до сих пор не получил полезных ответов.:(
Неужели эта проблема очень сложная?

Ответ 1

Вы пытаетесь использовать HttpApplication вне своего конвейера инициализации. Только не делай этого. Как говорится в ошибке, свяжите свои события во время инициализации IHttpModule.

Ответ 2

Поскольку IIS7 имеет некоторые изменения в том, как запускается HTTP-приложение (в основном, связанный с рабочим процессом и HTTP-приложение).

Посмотрите http://n2cms.codeplex.com/Thread/View.aspx?ThreadId=38311.

Если вы запускаете IIS7 в классическом режиме или в интегрированном режиме со следующими элементами в web.config, он должен работать нормально:

<configuration>
   <system.webServer>
      <validation validateIntegratedModeConfiguration="false"/>
   </system.webServer>
</configuration>

(Снято с http://code.google.com/p/n2cms/source/browse/trunk/src/wwwroot/Web.config)

Ответ 3

Если он работает в вашей среде разработки, а не на вашем IIS, есть вероятность, что вы (были?) используете сервер Cassini dev. Этот сервер далек от того же поведения, что и IIS.

Другим решением является использование IIS Express вместо этого, которые обеспечивают одинаковый уровень интеграции в Visual Studio (по крайней мере, начиная с 2010 года), чем старый сервер Dev-сервера Cassini, но в большей степени похожий на IIS. IIS Express имеет автономный установщик, доступный на веб-сайте Microsoft, а также включен в самые последние версии Visual Studio.

Это для "почему" в вашей первой строке вопроса.

Что касается того, почему запрещено связать события вне инициализации IHttpModule, я не знаю.