O IIS não carrega o módulo HTTP personalizado do web.config


18

Eu tenho um módulo HTTP personalizado para um site ASP.NET MVC3 que estou carregando do web.config:

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

O módulo é carregado corretamente quando eu executo o site no servidor da Web VS (o ponto de interrupção no meu método Init é atingido), mas quando eu o hospedo no IIS, ele parece ser ignorado (o ponto de interrupção é perdido e a funcionalidade do módulo está ausente). do site). Eu tentei em duas caixas separadas do IIS com um resultado semelhante.

O que estou fazendo de errado? Existe uma configuração em que preciso ativar o IIS para carregar módulos do web.config de um site?

Respostas:


25

Eu descobri isso logo depois que fiz a pergunta - o IIS7 usa um esquema diferente para o web.config. O local correto para carregar um módulo é agora:

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

3
encontrei esse mesmo problema e esta postagem me ajuda a corrigi-lo. Descobri que é necessário manter o system.web / httpModules e system.webServer / modules para que meu módulo personalizado funcione no servidor dev local e no servidor de produção.
Ido Ran

UAU! obrigado. Eu estava realmente batendo minha cabeça contra a parede nesta.
Alex C

3
Provavelmente, a diferença não é o IIS6 x IIS7, mas o clássico versus o modo integrado.
Jan Zahradník

1

Eu tenho um problema similar. Minha solução envolveu remover o módulo primeiro e depois adicioná-lo novamente ao espaço de nome system.webServer.

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

Isso pode ocorrer porque implantamos em dois servidores IIS diferentes. um no servidor 2003 (iis 6) e um no servidor 2008 (iis7 +). Então, adicionar o módulo ao parecia impedi-lo de carregar no espaço para nome. Eu poderia estar errado aqui ...


1

7 anos depois: não é específico para a versão do IIS, é específico para o modo de pool de aplicativos: clássico 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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.