Mensagem de erro ao visitar um site hospedado no IIS 7.0 ou versões posteriores: ERRO HTTP 404.17 – Não Encontrado

Este artigo ajuda você a resolve o erro HTTP 404.17 – Não encontrado problema ao visitar um site hospedado no IIS (Internet Information Services) 7.0 ou versões posteriores.

Versão original do produto: Serviços de Informações da Internet
Número de KB original: 2019689

Sintomas

Você tem um site hospedado no IIS 7.0 ou versões posteriores. Ao navegar até o conteúdo dinâmico no site usando um navegador da Web, você pode receber uma mensagem de erro que se assemelha ao seguinte:

Resumo do erro
Erro HTTP 404.17 – Não encontrado
O conteúdo solicitado parece ser script e não será atendido pelo manipulador de arquivos estático.
Informações detalhadas de erro:

Módulo StaticFileModule
ExecuteRequestHandler de Notificação
Handler StaticFile
Código de erro 0x80070032

URL solicitada http://iisserver:80/page.aspx
Caminho físico C:\inetpub\wwwroot\page.aspx
Método Logon Anônimo
Logon User Anonymous

Motivo

Esse erro ocorre porque o Manipulador HTTP configurado para lidar com a solicitação tem determinadas pré-condições definidas, mas seu pool de aplicativos não atende a algumas ou todas essas pré-condições. Isso faz com que o manipulador de arquivos estático seja usado para processar a solicitação. O processamento da solicitação então falha e o 404.17 status retornado porque a solicitação é para um recurso dinâmico e não estático.

Por exemplo, considere o seguinte mapeamento do manipulador:

<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />

Nesse caso, um erro 404.17 será retornado se o recurso *.aspx que está sendo solicitado do site for tratado em um pool de aplicativos que não está em execução no Classic Modo, não tiver 32 bits ou não estiver executando a versão 2.0 do .NET Framework. Para que o recurso seja atendido corretamente neste exemplo, todas as três pré-condições devem ser atendidas. Especificamente, o pool de aplicativos que hospeda esse recurso teria que ser configurado para Classic o Modo, ele precisaria ser configurado para usar a versão 2.0 do .NET Framework e ele precisaria ser definido para aplicativos de 32 bits.

Resolução

Para resolve esse problema, configure o Pool de Aplicativos que hospeda o aplicativo para atender a todas as pré-condições definidas para o Manipulador.

  1. Abrir o Gerenciador do IIS

  2. Expanda o nome do computador e clique em Pools de Aplicativos no painel esquerdo.

  3. Realce o Pool de Aplicativos que hospeda o recurso no painel do meio.

  4. No painel de extrema direita, clique em Configurações Avançadas...

  5. Na caixa de diálogo Configurações avançadas na categoria (Geral), configure as seguintes configurações para corresponder aos requisitos do manipulador:

    • versão .NET Framework
    • Habilitar aplicativos de 32 bits
    • Modo de Pipeline Gerenciado

Mais informações

As informações nesta seção destinam-se a ajudar a identificar quais manipuladores estão configurados para o site e o aplicativo mencionados no erro, bem como ajudar a identificar as pré-condições configuradas para esse manipulador.

comandos Appcmd.exe

Os comandos a seguir podem ser usados para identificar os manipuladores configurados para o Site da Web listados na saída do erro.

Listar pool de aplicativos

Os comandos a seguir mostram como determinar em qual pool de aplicativos o aplicativo está em execução e, em seguida, listar as pré-condições configuradas para esse pool de aplicativos.

C:\Windows\System32\inetsrv>appcmd.exe list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)

C:\Windows\System32\inetsrv>appcmd.exe list apppools
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

Manipuladores de lista

Esse comando produzirá os manipuladores configurados para o aplicativo específico no site padrão.

C:\Windows\System32\inetsrv>appcmd.exe list config "Default Web Site/application" -section:handlers
<system.webServer>
  <handlers accessPolicy="Read, Script">
    <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
  </handlers>
</system.webServer>

No caso de ASP.NET, pode haver muitos manipuladores configurados para um recurso *.aspx. Em alguns casos, o manipulador pode precisar apenas ser alterado para corresponder ao pool de aplicativos em que o aplicativo está em execução. Abaixo está uma lista dos diferentes manipuladores ASP.NET 2.0 com suas várias configurações de pré-condição.

  • ASP.NET manipulador de 32/64 bits do modo integrado 2.0 2.0

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • manipulador de 32 bits do modo clássico de 2.0 ASP.NET 2.0

    <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" 
        scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" 
        responseBufferLimit="0" />
    
  • manipulador de 64 bits do modo clássico de 2.0 ASP.NET 2.0

    <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" 
         preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
    

Etapas para reproduzir

  1. Crie um diretório que contenha dois arquivos.

    • Test.aspx com o conteúdo <%Response.Write("Hello World")%>

    • Web.config com o conteúdo:

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
          <system.webServer>
              <httpRedirect enabled="false" destination="http://TestSite" exactDestination="false" childOnly="false" httpResponseStatus="Permanent" />
              <security>
              </security>
              <handlers>
                  <clear/>
                  <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
                  <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
              </handlers>
          </system.webServer>
          <system.web>
              <authentication mode="Windows">
                  <forms cookieless="UseCookies" />
              </authentication>
          </system.web>
      </configuration>
      
  2. Crie um aplicativo de versões do IIS 7.0 ou posterior que aponte para o diretório com esses dois arquivos.

  3. Configure o novo aplicativo para ser executado em um pool de aplicativos configurado para o modo integrado.

  4. Navegue até test.aspx.