IIS lädt kein benutzerdefiniertes HTTP-Modul aus web.config

18

Ich habe ein benutzerdefiniertes HTTP-Modul für eine ASP.NET MVC3-Website, die ich aus web.config lade:

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

Das Modul wird korrekt geladen, wenn ich die Site auf dem VS-Webserver ausführe (der Haltepunkt in meiner Init-Methode ist erreicht), aber wenn ich es in IIS hoste, scheint es ignoriert zu werden (der Haltepunkt fehlt und die Funktionalität des Moduls fehlt von der Website). Ich habe es auf zwei unterschiedlichen IIS-Kästen mit einem ähnlichen Resultat versucht.

Was mache ich falsch? Gibt es eine Einstellung, die ich aktivieren muss, damit IIS Module aus der web.config einer Site lädt?

Mike Chamberlain
quelle

Antworten:

25

Das habe ich herausgefunden, kurz nachdem ich die Frage gestellt hatte: IIS7 verwendet ein anderes Schema für die web.config. Der richtige Ort zum Laden eines Moduls ist jetzt:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>
Mike Chamberlain
quelle
3
Ich bin auf dasselbe Problem gestoßen, und dieser Beitrag hilft mir, es zu beheben. Ich habe festgestellt, dass es erforderlich ist, sowohl system.web / httpModules als auch system.webServer / modules beizubehalten, damit mein benutzerdefiniertes Modul sowohl auf dem lokalen Entwicklungsserver als auch auf dem Produktionsserver funktioniert.
Ido Ran
WOW! Danke dir. Ich habe meinen Kopf wirklich gegen die Wand geschlagen.
Alex C
3
Wahrscheinlich liegt der Unterschied nicht zwischen IIS6 und IIS7, sondern zwischen dem klassischen und dem integrierten Modus.
Jan Zahradník
1

Ich habe ein ähnliches Problem. Meine Lösung bestand darin, zuerst das Modul zu entfernen und es dann erneut dem Namespace system.webServer hinzuzufügen.

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

Dies kann daran liegen, dass wir auf zwei verschiedenen IIS-Servern bereitstellen. Eins auf Server 2003 (iis 6) und eins auf Server 2008 (iis7 +). Das Hinzufügen des Moduls zu blockierte also anscheinend das Laden im Namespace. Ich könnte mich hier irren ...

Dai Bok
quelle
1

7 Jahre später: Es ist nicht spezifisch für die IIS-Version, sondern spezifisch für den Anwendungspoolmodus: Klassisch versus integriert.

  <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
quelle