viernes, 26 de octubre de 2012

ASP.global_asax The file 'XXX.aspx' does not exist at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)

Tenemos un site ASP.NET hospedado en IIS configurado con canalización clásica y si probamos a acceder a http://www.mydomain.com/paginaquenoexiste.aspx nos devuelve el error que más abajo detallamos :

Se podría dar el caso que recibamos el error en horas en las que sabemos que nadie está conectado. En este caso seguramente sea algún robot de google u otra compañia que intenta acceder a un recurso que tiene indexado. A parte de aplicar la solución que se explica en el artículo no estaría de más enviar un sitemap actualizado mediante las herramientas webmasters que nos proporcionan la mayoría de buscadores para que eliminen el rastro de páginas que ya no existen en sus indices de búsqueda.

ASP.global_asax The file 'XXX.aspx' does not exist at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
Origen: ASP.global_asax 
Message: The file 'XXX.aspx' does not exist. 
StackTrace: at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
   at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
   at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
   at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
   at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
   at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
Type: System.Web.HttpException 
TargetSite: Void CheckVirtualFileExists(System.Web.VirtualPath) 
Identity: SERVIDOR\IUSR_SERVIDOR
IIS si está configurado con canalización clásica no comprueba si la página existe sino que delega la petición a aspnet_isapi.dll. ASP.NET por defecto fuerza la ejecución de la página y se genera esta excepción.

La solución más rápida y sencilla es configurar el site desde IIS para que aspnet_isapi.dll compruebe si existe la página y en caso que no exista devuelva un 404 como resultado de la petición. Veamos como hacerlo:

Abrimos la consola de administración de IIS, accedemos a las propiedades del site, nos situamos en la pestaña "Directorio Particular" y pulsamos "Configuración".


En la siguiente pantalla seleccionamos la extensión correspondiente, en este caso ".aspx" y pulsamos "Modificar".


Finalmente en el siguiente formulario hemos de marcar la casilla "Comprobar si el archivo existe".


Hasta aquí el post de esta semana, os recordamos que podéis seguir areaTIC en las redes sociales o vía RSS!


No hay comentarios:

Publicar un comentario en la entrada