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?

¿Fue útil?

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);

            }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top