Usługi IIS nie ładują niestandardowego modułu HTTP z pliku web.config

18

Mam niestandardowy moduł HTTP dla strony ASP.NET MVC3, którą ładuję z web.config:

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

Moduł jest ładowany poprawnie, gdy uruchamiam witrynę z serwera VS (trafia się punkt przerwania w mojej metodzie Init), ale kiedy go hostuję w IIS, wydaje się być ignorowany (punkt przerwania jest pominięty, a funkcjonalność modułu jest nieobecna ze strony). Próbowałem tego na dwóch osobnych polach IIS z podobnym wynikiem.

Co ja robię źle? Czy jest jakieś ustawienie, które muszę włączyć, aby umożliwić IIS ładowanie modułów z pliku web.config witryny?

Mike Chamberlain
źródło

Odpowiedzi:

25

Zrozumiałem to wkrótce po zadaniu pytania - IIS7 używa innego schematu dla web.config. Prawidłowe miejsce do załadowania modułu to teraz:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>
Mike Chamberlain
źródło
3
napotkałem ten sam problem i ten post pomaga mi to naprawić. Odkryłem, że wymagane jest utrzymanie zarówno system.web / httpModules, jak i system.webServer / modules, aby mój moduł niestandardowy działał zarówno na lokalnym serwerze deweloperskim, jak i serwerze produkcyjnym.
Ido Ran,
ŁAŁ! Dziękuję Ci. Naprawdę waliłem głową w ścianę.
Alex C
3
Prawdopodobnie różnica nie polega na IIS6 vs IIS7, ale na trybie klasycznym vs zintegrowanym.
Jan Zahradník
1

Mam podobny problem. Moje rozwiązanie wymagało najpierw usunięcia modułu, a następnie ponownego dodania go do przestrzeni nazw system.webServer.

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

Może to być spowodowane tym, że wdrażamy na dwóch różnych serwerach IIS. jeden na serwerze 2003 (iis 6) i jeden na serwerze 2008 (iis7 +). Dodanie modułu do wydawało się więc blokować ładowanie go w przestrzeni nazw. Mógłbym się tutaj mylić ...

Dai Bok
źródło
1

7 lat później: nie jest specyficzny dla wersji IIS, jest specyficzny dla trybu puli aplikacji: klasyczny kontra zintegrowany.

  <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
źródło