¿Existe alguna manera de manejar globalmente excepciones en el servicio web ASP.NET normal (asmx) usando ELMAH como lo hacemos en el sitio web ASP.NET?Manejar excepciones en servicios web con Elmah
Respuesta
Los servicios web de ASP.NET nunca disparan Application_Error
el evento y las excepciones no pueden ser manejadas globalmente por ELMAH como en las aplicaciones de ASP.NET. Pero podemos "manualmente" log excepciones usando ELMAH:
public int WebServiceMethod() {
try {
...
}
catch (Exception ex) {
Elmah.ErrorLog.GetDefault(
HttpContext.Current).Log(new Elmah.Error(ex, HttpContext.Current));
}
}
Se puede utilizar un SoapExtension para hacer esto:
using System;
using System.Web.Services.Protocols;
namespace MyNamespace
{
class ELMAHExtension : SoapExtension
{
public override object GetInitializer(Type serviceType)
{ return null; }
public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{ return null; }
public override void Initialize(object initializer)
{ }
public override void ProcessMessage(SoapMessage message)
{
if (message.Stage == SoapMessageStage.AfterSerialize &&
message.Exception != null)
{
// Log exception here
}
}
}
}
se ha registrado esta en el web.config con las siguientes líneas:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="MyNamespace.ELMAHExtension, MyDLL" priority="1" group="1" />
</soapExtensionTypes>
</webServices>
</system.web>
Esto le dará acceso a los objetos HttpContext y SoapMessage que le proporcionarán todos los detalles que necesita sobre lo que se está llamando. Creo que la excepción que recuperas en esta etapa siempre será SoapException y que el bit en el que estás interesado probablemente sea la excepción interna.
Gracias, lo intentaré. –
no han tenido la oportunidad de probar esto todavía, pero parece que debería funcionar. Donde dice 'excepción de registro aquí', el código 'Elmah.ErrorLog.GetDefault ( HttpContext.Current) .Log (nuevo Elmah.Error (por ejemplo, HttpContext.Current)); 'podría hacer el truco. – codeulike
Funciona, de hecho. – avesse
Usted puede utilizar este código
try{
// your code in here
}
catch (Exception ert)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ert);
}
- 1. La mejor forma de manejar excepciones en una aplicación con servicios web
- 2. Elmah no registra excepciones
- 3. elmah: excepciones sin HttpContext?
- 4. Manejar excepciones en AppDomain.CurrentDomain.UnhandledException
- 5. Patrones para manejar operaciones por lotes en servicios web REST?
- 6. Autenticación mutua con servicios web
- 7. nombre de usuario Inicio de sesión con Elmah para servicios web WCF
- 8. Métodos para manejar excepciones en un proyecto web utilizando C#
- 9. Cómo configurar Elmah con ASP.NET Web API
- 10. Manejar o no manejar parámetros nulos con excepciones
- 11. Cómo manejar excepciones DOP
- 12. Servicios web SOAP en erlang
- 13. Cómo manejar excepciones con Ruby Rest-Client
- 14. Manejar Excepciones de ORACLE
- 15. banderas con los servicios web
- 16. Consultando servicios web con SQL
- 17. servicios web, aplicación web
- 18. Compatibilidad con versiones anteriores y servicios web
- 19. Servicios web en Java
- 20. ¿Manera correcta de manejar excepciones en Python?
- 21. ELMAH vs Enterprise Library Bloque de manejo de excepciones
- 22. ¿Cómo manejar excepciones generales en Asp.Net MVC?
- 23. Nombre de aplicación ELMAH: mostrar excepciones registradas por otro sitio
- 24. Excepciones y servicios WCF con devolución de nulo tipo
- 25. Desarrollo de módulos DotNetNuke con servicios web
- 26. Servicios web con Google App Engine
- 27. Creando servicios web seguros con ColdFusion
- 28. Monotouch: Servicios WCF y manejo de excepciones
- 29. ELMAH con múltiples aplicaciones
- 30. Servicios web RESTful con ASP.NET MVC
Eso es lo que pensaba, pero me iba a registrar si había una solución "más limpia". Gracias –
Sí, la solución más limpia o práctica sería interesante para mí también. Y esta es una buena pregunta (+1). –
Finalmente utilicé su solución, no encontré una mejor manera de hacerlo. Gracias por la pista. –