IIS no carga el módulo HTTP personalizado desde web.config

18

Tengo un módulo HTTP personalizado para un sitio web ASP.NET MVC3 que estoy cargando desde web.config:

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

El módulo se carga correctamente cuando ejecuto el sitio desde el servidor web VS (se alcanza el punto de interrupción en mi método Init) pero cuando lo alojo en IIS parece ignorarse (el punto de interrupción se pierde y la funcionalidad del módulo está ausente desde el sitio). Lo he probado en dos cajas de IIS separadas con un resultado similar.

¿Qué estoy haciendo mal? ¿Hay alguna configuración que deba activar para permitir que IIS cargue módulos desde el sitio web.config?

Mike Chamberlain
fuente

Respuestas:

25

Lo descubrí poco después de hacer la pregunta: IIS7 usa un esquema diferente para web.config. El lugar correcto para cargar un módulo es ahora:

<system.webServer>
  <modules>
    <add name="MyModule" type="MySolution.Web.MyHttpModule, MySolution.Web" />
  </modules>
</system.webServer>
Mike Chamberlain
fuente
3
Me he encontrado con este mismo problema y esta publicación me ayuda a solucionarlo. Descubrí que es necesario mantener tanto system.web / httpModules como system.webServer / modules para que mi módulo personalizado funcione tanto en el servidor de desarrollo local como en el servidor de producción.
Ido Ran
¡GUAUU! gracias. Realmente estaba golpeando mi cabeza contra la pared en este caso.
Alex C
3
Probablemente la diferencia no sea IIS6 vs IIS7 sino el modo clásico vs integrado.
Jan Zahradník
1

Tengo un problema similar. Mi solución implicó eliminar primero el Módulo y luego volver a agregarlo al espacio de nombres system.webServer.

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

Esto puede deberse a que implementamos en dos servidores IIS diferentes. uno en el servidor 2003 (iis 6) y uno en el servidor 2008 (iis7 +). Por lo tanto, agregar el módulo parece bloquearlo para que no se cargue en el espacio de nombres. Podría estar equivocado aquí ...

Dai Bok
fuente
1

7 años después: no es específico de la versión IIS, es específico del modo de grupo de aplicaciones: clásico versus integrado.

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