Обработайте исключения в веб-сервисах с Elmah

Существует ли способ глобально обработать исключения в регулярном веб-сервисе ASP.NET (asmx) использующий ELMAH как, мы делаем это на веб-сайте ASP.NET?

34
задан John Saunders 22 February 2012 в 19:12
поделиться

2 ответа

Web Services ASP.NET Никогда пожар Application_Error Событие и исключения не могут быть обработаны во всем мире Elmah, как в приложениях ASP.NET Отказ Но мы можем «вручную» исключения журнала, используя Elmah:


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

25
ответ дан 27 November 2019 в 17:00
поделиться

Для этого вы можете использовать расширение SoapExtension :

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

Вы регистрируете его в web.config следующими строками:

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

Это даст вам доступ к объектам HttpContext и SoapMessage, которые должны дать вам все необходимые детали о том, что было вызвано. Я думаю, что исключение, которое вы получите на этом этапе, всегда будет SoapException и что часть, которая вас интересует, вероятно, является внутренним исключением.

23
ответ дан 27 November 2019 в 17:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: