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 / модулі, щоб мій спеціальний модуль працював як на локальному сервері розробників, так і на виробничому сервері.
Ідо Ран

ОЦЕ ТАК! Дякую. Я справді стукав головою об стіну на цьому.
Алекс С

3
Ймовірно, різниця не в IIS6 проти IIS7, а в класичному та інтегрованому режимі.
Jan Zahradník

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.