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 cuando visita un sitio web hospedado en Internet Information Services (IIS) 7.0 o versiones posteriores.
Versión del producto original: Internet Information Services
Número KB original: 2019689
Síntomas
Tiene un sitio web hospedado en IIS 7.0 o versiones posteriores. Cuando explora contenido dinámico en el sitio web mediante un explorador web, puede recibir un mensaje de error similar al siguiente:
Resumen de errores
Error HTTP 404.17: no encontrado
El contenido solicitado parece ser un script y el controlador de archivos estático no lo va a servir.
Información de error detallada:Module StaticFileModule
Notificación ExecuteRequestHandler
Handler StaticFile
Código de error 0x80070032Dirección URL solicitada http://iisserver:80/page.aspx
Ruta de acceso física C:\inetpub\wwwroot\page.aspx
Método Logon Anónimo
Anónimo de usuario de inicio de sesión
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 con algunas o todas estas condiciones previas. Esto hace que el controlador de archivos estático se utilice 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, considere 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 modo, no es de 32 bits o no ejecuta la Classic versión 2.0 del .NET Framework. Para que el recurso se pueda servir 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 mode, tendría que configurarse para usar la versión 2.0 del .NET Framework y tendría que establecerse para aplicaciones de Classic 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.
Abrir el Administrador de IIS
Expanda el nombre del equipo y haga clic en Grupos de aplicaciones en el panel izquierdo.
Resalte el grupo de aplicaciones que hospeda el recurso en el panel central.
En el panel de extrema derecha, haga clic en Configuración...
En el cuadro de diálogo Configuración avanzada de la categoría (General), configure las siguientes opciones para que coincidan con los requisitos del controlador:
- .NET Framework versión
- Habilitar aplicaciones de 32 bits
- Modo de canalización administrada
Más información
La información de esta sección está destinada a ayudar a identificar qué controladores están configurados para el sitio web y la aplicación mencionados en el error, así como ayudar a identificar las condiciones previas configuradas para ese controlador.
Appcmd.exe comandos
Los siguientes comandos se pueden usar para identificar los controladores configurados para el sitio web enumerados en el resultado del error.
Enumerar grupo de aplicaciones
Los siguientes comandos 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 mostrará 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 solo sea necesario cambiar el controlador 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 distintos controladores ASP.NET 2.0 con sus distintas configuraciones previas a la condición.
ASP.NET de 2.0 Modo integrado de 32/64 bits
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />ASP.NET de 2.0 Classic Mode de 32 bits
<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 de 2.0 Classic Mode de 64 bits
<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
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>
Cree una aplicación de IIS 7.0 o versiones posteriores que apunta al directorio con estos dos archivos.
Configure la nueva aplicación para que se ejecute en un grupo de aplicaciones configurado para el modo integrado.
Vaya a test.aspx.