Почему обработчики событий могут быть связаны только с событиями HttpApplication во время инициализации IHttpModule? - PullRequest
10 голосов
/ 06 мая 2010

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 06 мая 2010

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

0 голосов
/ 21 мая 2014

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

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

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

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

0 голосов
/ 11 мая 2010

Поскольку в 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)

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