¿Por qué el método Application.Error global.asax no detecta excepciones lanzadas por el servicio ASMX?

Y como arreglarlo. Me gustaría registrar cada excepción lanzada para fines de mantenimiento.

Este es un problema conocido en .Net – Application_Error nunca se activa para un servicio web. No estoy seguro de si hay algún motivo por el diseño, pero simplemente no funciona.

Jeff Atwood tuvo una publicación (y seguimiento ) sobre esto hace unos años, con las siguientes ideas:

  • Ponga un bloque try-catch alrededor de cada método de servicio web
  • Utilice un patrón de diseño de fachada e incluya el try-catch en objetos primarios
  • Escribir una extensión SOAP personalizada o HTTPModule

El único que me importa es el primero, a pesar de que parece mucho trabajo.

Mejor: evento HttpApplication.Error :

Nota:

Si su aplicación web contiene servicios web XML, no puede usar el evento Error para el manejo global de excepciones de esos servicios. El controlador HTTP para servicios web XML consume cualquier excepción que se produzca en un servicio web XML y la convierte en un error SOAP antes de que se invoque el error. Para gestionar las excepciones del servicio web XML, cree una extensión SOAP para procesar las excepciones del servicio web en un manejador de excepción global personalizado. Para obtener más información, consulte Manejo y lanzamiento de excepciones en XML Web Services .

Para cualquiera que busque la palabra de Microsoft sobre este tema, consulte aquí: ” Manejo y lanzamiento de excepciones en XML Web Services “.

Esta es la sección relevante:

Una aplicación web puede estar compuesta de múltiples servicios web XML, sin embargo, el evento Application_Error dentro del archivo Global.asax no se puede usar para el manejo global de excepciones. El HttpHandler para servicios web XML consume cualquier excepción que se produce mientras se está ejecutando un servicio web XML y lo convierte en un error SOAP antes de que se invoque el evento Application_Error.

Application_error no funciona en iis 7 de forma predeterminada.