Compartilhar via


Mensagem de erro ao acessar um site hospedado no IIS 7.0 ou versões posteriores: Erro HTTP 404.17 - Não Encontrado

Este artigo ajuda a resolver o problema do Erro HTTP 404.17 - Não Encontrado quando você visita um site hospedado no IIS (Serviços de Informações da Internet) 7.0 ou versões posteriores.

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

Sintomas

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

Resumo dos erros
Erro HTTP 404.17 - Não encontrado
O conteúdo solicitado parece ser script e não será servido pelo manipulador de arquivos estáticos.
Informações detalhadas sobre erros:

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

URL solicitado http://iisserver:80/page.aspx
Caminho Físico C:\inetpub\wwwroot\page.aspx
Método de logon anônimo
Usuário de logon anônimo

Causa

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áticos seja usado para processar a solicitação. O processamento da solicitação falha e o status 404.17 é retornado porque a solicitação é para um recurso dinâmico e não estático.

Por exemplo, considere o seguinte mapeamento de 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 esteja em execução no Classic Modo, não seja de 32 bits ou não esteja executando a versão 2.0 do .NET Framework. Para que o recurso seja servido 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, precisaria ser configurado para usar a versão 2.0 do .NET Framework e precisaria ser definido para aplicativos de 32 bits.

Solução

Para resolver esse problema, configure o pool de aplicativos que hospeda o aplicativo para atender a todas as pré-condições definidas para o manipulador.

  1. Abra 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 direito, clique em Configurações avançadas...

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

    • Versão do .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.

Appcmd.exe comandos

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

Listar pool de aplicativos

Os comandos a seguir mostram como determinar em qual pool de aplicativos o aplicativo está sendo executado e, em seguida, listam 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 ser alterado para corresponder ao pool de aplicativos em que o aplicativo está sendo executado. Abaixo está uma lista dos diferentes manipuladores do ASP.NET 2.0 com suas várias configurações de pré-condição.

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

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

    <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" />
    
  • ASP.NET 2.0 Manipulador de 64 bits no modo clássico

    <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 do IIS 7.0 ou versões posteriores 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.