IIS non carica il modulo HTTP personalizzato da web.config


18

Ho un modulo HTTP personalizzato per un sito Web ASP.NET MVC3 che sto caricando da web.config:

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

Il modulo viene caricato correttamente quando eseguo il sito dall'interno del server Web VS (viene colpito il punto di interruzione nel mio metodo Init) ma quando lo ospito in IIS sembra essere ignorato (il punto di interruzione viene perso e la funzionalità del modulo è assente dal sito). L'ho provato su due scatole IIS separate con un risultato simile.

Che cosa sto facendo di sbagliato? Esiste un'impostazione che devo selezionare per abilitare IIS per caricare i moduli dal web.config di un sito?

Risposte:


25

L'ho capito poco dopo aver posto la domanda: IIS7 utilizza uno schema diverso per web.config. Il posto corretto per caricare un modulo è ora:

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

3
ho riscontrato questo stesso problema e questo post mi aiuta a risolverlo. Ho scoperto che è necessario mantenere sia system.web / httpModules che system.webServer / modules per far funzionare il mio modulo personalizzato sia sul server di sviluppo locale che sul server di produzione.
Ido Ran,

WOW! grazie. Stavo davvero sbattendo la testa contro il muro su questo.
Alex C

3
Probabilmente la differenza non è IIS6 vs IIS7 ma la modalità classica vs integrata.
Jan Zahradník,

1

Ho un problema simile. La mia soluzione prevedeva prima di rimuovere il modulo e poi di aggiungerlo nuovamente allo spazio dei nomi system.webServer.

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

Ciò può essere dovuto al fatto che eseguiamo la distribuzione su due diversi server IIS. uno sul server 2003 (iis 6) e uno sul server 2008 (iis7 +). Quindi l'aggiunta del modulo a sembrava bloccarlo dal caricamento nello spazio dei nomi. Potrei sbagliarmi qui ...


1

7 anni dopo: non è specifico per la versione IIS, è specifico per la modalità pool di applicazioni: classica contro integrata.

  <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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.