IIS не загружает пользовательский модуль HTTP из web.config

18

У меня есть собственный модуль HTTP для веб-сайта ASP.NET MVC3, который я загружаю из web.config:

<system.web>
    <httpModules>
      <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
    </httpModules>
</system.web>

Модуль загружается правильно, когда я запускаю сайт из веб-сервера VS (достигнута точка останова в моем методе Init), но когда я размещаю его в IIS, он, кажется, игнорируется (точка останова пропущена, а функциональность модуля отсутствует с сайта). Я пробовал это на двух отдельных блоках IIS с похожим результатом.

Что я делаю неправильно? Есть ли параметр, который мне нужно щелкнуть, чтобы IIS загружал модули из web.config сайта?

Майк Чемберлен
источник

Ответы:

25

Я понял это вскоре после того, как задал вопрос - IIS7 использует другую схему для web.config. Правильное место для загрузки модуля теперь:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>
Майк Чемберлен
источник
3
столкнулся с этой же проблемой, и этот пост поможет мне исправить это. Я обнаружил, что необходимо сохранить как system.web / httpModules, так и system.webServer / modules, чтобы мой пользовательский модуль работал как на локальном dev-сервере, так и на рабочем сервере.
Идо Ран
ВОТ ЭТО ДА! Спасибо. Я действительно бился головой об стену на этом.
Алекс C
3
Вероятно, разница не в IIS6 против IIS7, а в классическом или интегрированном режиме.
Ян Захрадник
1

У меня похожая проблема. Мое решение состояло в том, чтобы сначала удалить модуль, а затем повторно добавить его в пространство имен system.webServer.

<system.webServer>
   <modules>
     <remove name="MyModule"/>
     <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
   </modules>
</system.webServer>

Это может быть связано с тем, что мы развертываем на двух разных серверах IIS. один на сервере 2003 (iis 6) и один на сервере 2008 (iis7 +). Таким образом, добавление модуля в казалось бы блокирует его загрузку в пространстве имен. Я могу ошибаться здесь ...

Дай Бок
источник
1

7 лет спустя: это не специфично для версии IIS, а специфично для режима пула приложений: классический или интегрированный.

  <system.webServer><!--for integrated mode-->
    <modules>
      <add name="modulename" type="blabla.modulenamehere" />
    </modules>
  </system.webServer>

  <system.web><!--for classic mode-->
     <httpModules>
      <add name="modulename" type="blabla.modulenamehere" />
    </httpModules>
  </system.web>
TamerDev
источник