Frage

Gibt es eine Möglichkeit Griff Ausnahmen in regelmäßigen ASP.NET Web Service (asmx) mit ELMAH global wie wir es in ASP.NET Web-Site zu tun?

War es hilfreich?

Lösung

ASP.NET Web Service nie Feuer Application_Error Ereignis und Ausnahmen können nicht global durch ELMAH wie Anwendungen in ASP.NET behandelt werden. Aber wir können "manuell" log Ausnahmen mit ELMAH:


public int WebServiceMethod() {
  try {
   ...
  }
  catch (Exception ex) {
    Elmah.ErrorLog.GetDefault(
      HttpContext.Current).Log(new Elmah.Error(ex, HttpContext.Current));
  }
}

Andere Tipps

Sie können eine Soapextension, dies zu tun:

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
            }
        }
    }
}

Sie dies mit den folgenden Zeilen in dem web.config registrieren:

<system.web>
  <webServices>
    <soapExtensionTypes>
      <add type="MyNamespace.ELMAHExtension, MyDLL" priority="1" group="1" />
    </soapExtensionTypes>
  </webServices>
</system.web>

Dies gibt Ihnen Zugriff auf die Httpcontext und Soapmessage Objekte, die Sie alle Details geben sollten Sie brauchen, was genannt wurde. Ich denke, die Ausnahme, die Sie zu diesem Zeitpunkt abgerufen wird immer ein Soap sein und dass das Bit Sie interessiert sind, ist wahrscheinlich die innere Ausnahme.

Sie können diesen Code verwenden

 try{
// your code in here
}
     catch (Exception ert)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ert);

            }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top