ASP.NET MVC: Elmah no funciona y devuelve la página 404 para elmah.axd
asp.net-mvc http-status-code-404 (4)
Estoy tratando de usar elmah para mi aplicación MVC y he seguido los pasos en la wiki: http://code.google.com/p/elmah/wiki/MVC , pero aún así cuando intento acceder a myapp / elmah .axd la página:
404 - Archivo o directorio no encontrado.
¿Alguien podría ayudarme por favor?
OBS: Mi versión de IIS es 7.5
Si me ayuda, estoy publicando las secciones pertinentes de mi web.config:
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
...
</connectionStrings>
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
</elmah>
<system.web>
...
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
<add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
Y en mi Global.asax.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
...
Aquí hay una buena manera de usar ELMAH en MVC here que no usa el axd
sino un controlador y un ElmahActionResult
personalizado.
Intente agregar esto a su archivo web.config en el
<system.webServer>
<handlers>
<remove name="ErrorLog" />
<remove name="ErrorMail" />
<remove name="ErrorFilter" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</handlers>
</system.webServer>
Para ayudar a otros a experimentar lo que @zanona se enfrentó en 2010 (ver comentarios a la respuesta de @ hunter más arriba), el siguiente cambio corrigió el mismo "Error HTTP 500.19 - Error interno del servidor" para mí hoy. Observe que la ubicación de las etiquetas de configuración en la respuesta de @ hunter es lo que causó el error de @zanona. Esas etiquetas @hunter mencionadas pertenecen al encabezado de los módulos, no a los manejadores uno!
<modules>
<remove name="ErrorLog" />
<remove name="ErrorMail" />
<remove name="ErrorFilter" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</modules>
La solución anterior eliminó para mí el mismo problema de "Error de configuración - Falta el atributo ''ruta''" que @zanona informó por primera vez. Ese error se debió a la forma en que se espera que se estructuren las etiquetas en el grupo de manejadores, y sus etiquetas reorganizadas causadas obviamente no tenían el atributo de ruta (porque no pertenecían allí, ¡sino que pertenecían a la etiqueta de módulos!) ). Ahora, aquí están las etiquetas en la sección de manejadores:
<handlers>
<add name="elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</handlers>
Observe que el atributo de ruta está presente allí? Ah!
Gracias a @hunter y @zanona porque me pusieron en el camino que necesitaba para resolver mi problema.
(NOTA: he intentado editar la publicación original de @hunter arriba para hacer las correcciones, pero la revisión por pares es lenta y pensé que mantendría esta respuesta aquí para ayudar a cualquier persona que se enfrente al mismo desafío mientras tanto. Aceptado, podríamos eliminar esta publicación.)
También debe completar la sección de configuración de system.webServer para IIS 7+. Vea esta pregunta .