excepciones mango en servicios web con Elmah
-
24-09-2019 - |
Pregunta
¿Hay una manera globalmente excepciones mango en Servicio Web ASP.NET regulares (asmx) usando ELMAH como lo hacemos en el sitio web de ASP.NET?
Solución
servicios web ASP.NET Nunca evento y excepciones Application_Error
fuego no pueden ser manejados a nivel mundial por ELMAH como en aplicaciones ASP.NET. Pero podemos "manualmente" log excepciones utilizando ELMAH:
public int WebServiceMethod() {
try {
...
}
catch (Exception ex) {
Elmah.ErrorLog.GetDefault(
HttpContext.Current).Log(new Elmah.Error(ex, HttpContext.Current));
}
}
Otros consejos
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 registra esto 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 deben dar todos los detalles que necesita acerca de lo que se llama. Creo que la excepción se recupera en esta etapa será siempre un SoapException y que el poco que les interesa es probablemente la excepción interna.
Puede utilizar este código
try{
// your code in here
}
catch (Exception ert)
{
Elmah.ErrorSignal.FromCurrentContext().Raise(ert);
}