Ответ 1
Вы пытаетесь использовать HttpApplication вне своего конвейера инициализации. Только не делай этого. Как говорится в ошибке, свяжите свои события во время инициализации IHttpModule.
Это просто еще один вопрос "работа на сервере dev, почему бы не работать в IIS".
Я создал хороший DAL, используя NHibernate как описанный здесь. При создании ISession я подключаю обработчик событий к HttpApplication.EndRequest, чтобы позаботиться о его очистке.
Однако я развернул свой сайт в IIS, и он говорит:
Обработчики событий могут привязываться только к событиям HttpApplication во время инициализации IHttpModule.
Я полностью понимаю, что говорится в сообщении, но я не могу его остановить.
Я могу подписаться на событие Button
в любое время, почему я не могу подписаться на событие HttpApplication
?
Я был бы очень благодарен, если бы кто-то мог пролить свет на это.
И я также задаюсь вопросом, почему он работает с сервером разработки, а не с IIS 7?
EDIT:
Теперь, когда прошло два месяца, я до сих пор не получил полезных ответов.:(
Неужели эта проблема очень сложная?
Вы пытаетесь использовать HttpApplication вне своего конвейера инициализации. Только не делай этого. Как говорится в ошибке, свяжите свои события во время инициализации IHttpModule.
Поскольку 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)
Если он работает в вашей среде разработки, а не на вашем IIS, есть вероятность, что вы (были?) используете сервер Cassini dev. Этот сервер далек от того же поведения, что и IIS.
Другим решением является использование IIS Express вместо этого, которые обеспечивают одинаковый уровень интеграции в Visual Studio (по крайней мере, начиная с 2010 года), чем старый сервер Dev-сервера Cassini, но в большей степени похожий на IIS. IIS Express имеет автономный установщик, доступный на веб-сайте Microsoft, а также включен в самые последние версии Visual Studio.
Это для "почему" в вашей первой строке вопроса.
Что касается того, почему запрещено связать события вне инициализации IHttpModule, я не знаю.