Mensaje de error al visitar un sitio web hospedado en IIS 7.0 o versiones posteriores: Error HTTP 404.17- No encontrado

Este artículo le ayuda a resolver el error HTTP 404.17: no encontrado problema al visitar un sitio web hospedado en Internet Information Services (IIS) 7.0 o versiones posteriores.

Versión del producto original: Internet Information Services
Número de KB original: 2019689

Síntomas

Tiene un sitio web hospedado en IIS 7.0 o versiones posteriores. Al buscar contenido dinámico en el sitio web mediante un explorador web, es posible que reciba un mensaje de error similar al siguiente:

Resumen de errores
Error HTTP 404.17: no encontrado
El contenido solicitado parece ser script y no lo atenderá el controlador de archivos estáticos.
Información detallada del error:

Módulo StaticFileModule
Notification ExecuteRequestHandler
Controlador StaticFile
Código de error 0x80070032

Dirección URL solicitada http://iisserver:80/page.aspx
Ruta de acceso física C:\inetpub\wwwroot\page.aspx
Método de inicio de sesión anónimo
Usuario de inicio de sesión anónimo

Causa

Este error se produce porque el controlador HTTP configurado para controlar la solicitud tiene determinadas condiciones previas establecidas, pero su grupo de aplicaciones no cumple algunas o todas estas condiciones previas. Esto hace que el controlador de archivos estáticos se use para procesar la solicitud en su lugar. A continuación, se produce un error en el procesamiento de la solicitud y se devuelve el estado 404.17 porque la solicitud es para un recurso dinámico y no para uno estático.

Por ejemplo, tenga en cuenta la siguiente asignación de controladores:

<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" />

En este caso, se devuelve un error 404.17 si el recurso *.aspx que se solicita desde el sitio se controla en un grupo de aplicaciones que no se ejecuta en Classic modo, no es de 32 bits o no ejecuta la versión 2.0 de .NET Framework. Para que el recurso se sirva correctamente en este ejemplo, se deben cumplir las tres condiciones previas. En concreto, el grupo de aplicaciones que hospeda este recurso tendría que configurarse para Classic Modo, tendría que configurarse para usar la versión 2.0 de .NET Framework y tendría que establecerse para aplicaciones de 32 bits.

Solución

Para resolver este problema, configure el grupo de aplicaciones que hospeda la aplicación para que cumpla todas las condiciones previas establecidas para el controlador.

  1. Abrir el Administrador de IIS

  2. Expanda el nombre del equipo y haga clic en Grupos de aplicaciones en el panel izquierdo.

  3. Resalte el grupo de aplicaciones que hospeda el recurso en el panel central.

  4. En el panel derecho, haga clic en Configuración avanzada...

  5. En el cuadro de diálogo Configuración avanzada de la categoría (General), configure los siguientes valores para que coincidan con los requisitos del controlador:

    • Versión de .NET Framework
    • Habilitar aplicaciones de 32 bits
    • Modo de canalización administrada

Más información

La información de esta sección está pensada para ayudar a identificar qué controladores están configurados para el sitio web y la aplicación mencionados en el error, así como para ayudar a identificar las condiciones previas configuradas para ese controlador.

comandos de Appcmd.exe

Los siguientes comandos se pueden usar para identificar los controladores configurados para el sitio web enumerados en la salida del error.

Enumeración del grupo de aplicaciones

Los comandos siguientes muestran cómo determinar en qué grupo de aplicaciones se ejecuta la aplicación y, a continuación, enumerar las condiciones previas configuradas para ese grupo de aplicaciones.

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)

Controladores de lista

Este comando generará los controladores configurados para la aplicación específica en el sitio web predeterminado.

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>

En el caso de ASP.NET, puede haber muchos controladores configurados para un recurso *.aspx. En algunos casos, es posible que el controlador solo tenga que cambiarse para que coincida con el grupo de aplicaciones en el que se ejecuta la aplicación. A continuación se muestra una lista de los diferentes controladores de ASP.NET 2.0 con sus distintas configuraciones previas a la condición.

  • ASP.NET controlador de modo integrado de 32/64 bits de 2,0

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET controlador de 32 bits del modo clásico 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" />
    
  • ASP.NET controlador de 64 bits del modo clásico 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" />
    

Pasos para reproducir

  1. Cree un directorio que contenga dos archivos.

    • Test.aspx con el contenido <%Response.Write("Hello World")%>

    • Web.config con el contenido:

      <?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. Cree una aplicación de IIS 7.0 o versiones posteriores que apunte al directorio con estos dos archivos.

  3. Configure la nueva aplicación para que se ejecute en un grupo de aplicaciones configurado para el modo integrado.

  4. Vaya a test.aspx.