IIS ne charge pas le module HTTP personnalisé à partir de web.config

18

J'ai un module HTTP personnalisé pour un site Web ASP.NET MVC3 que je charge à partir de web.config:

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

Le module est chargé correctement lorsque j'exécute le site à partir du serveur Web VS (le point d'arrêt dans ma méthode Init est atteint) mais lorsque je l'héberge dans IIS, il semble être ignoré (le point d'arrêt est manqué et la fonctionnalité du module est absente du site). Je l'ai essayé sur deux boîtes IIS distinctes avec un résultat similaire.

Qu'est-ce que je fais mal? Existe-t-il un paramètre que je dois activer pour permettre à IIS de charger des modules à partir du site web.config d'un site?

Mike Chamberlain
la source

Réponses:

25

J'ai compris cela peu de temps après avoir posé la question - IIS7 utilise un schéma différent pour le web.config. Le bon endroit pour charger un module est maintenant:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>
Mike Chamberlain
la source
3
'ai rencontré ce même problème et cet article m'aide à le résoudre. J'ai trouvé qu'il est nécessaire de conserver à la fois system.web / httpModules et system.webServer / modules pour que mon module personnalisé fonctionne à la fois sur le serveur de développement local et sur le serveur de production.
Ido Ran
HOU LA LA! Merci. Je me cognais vraiment la tête contre le mur sur celui-ci.
Alex C
3
La différence n'est probablement pas IIS6 vs IIS7 mais le mode classique vs intégré.
Jan Zahradník
1

J'ai le même problème. Ma solution consistait à supprimer le module en premier, puis à le rajouter à l'espace de noms system.webServer.

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

Cela peut être dû au fait que nous déployons sur deux serveurs IIS différents. un sur le serveur 2003 (iis 6) et un sur le serveur 2008 (iis7 +). Donc, l'ajout du module à semblait l'empêcher de se charger dans l'espace de noms. Je peux me tromper ici ...

Dai Bok
la source
1

7 ans plus tard: il n'est pas spécifique à la version IIS, il est spécifique au mode pool d'applications: classique versus intégré.

  <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
la source