Добавление глобальной обработки ошибок в службу WCF REST - PullRequest
4 голосов
/ 29 июля 2011

У меня есть веб-служба WCF / REST, к которой я пытаюсь добавить глобальный обработчик исключений.Я ищу что-то похожее на событие Application_Error на стандартном веб-сайте .NET.

Я нашел много информации об использовании IErrorHandler и IServiceBehavior, как описано здесь: http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx#Y1479

Это похоже на то, что мне нужно, но каждый найденный пример предполагает, что служба определена в файле web.config.Я этого не делаю - я использую RouteTables, настроенные в global.asax, вот так:

 public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        // Edit the base address of Service1 by replacing the "Service1" string below

        RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHost2Factory(), typeof(myService)));


    }

Итак, как мне настроить мои собственные IErrorHandler и IServiceBehavior?Я даже на правильном пути, учитывая, что я использую RouteTable, а не настраиваю его через web.config?Я очень новичок в WCF ....

1 Ответ

5 голосов
/ 06 октября 2011

Подключение вашей IServiceBehaviour может быть достигнуто путем создания пользовательского WebServiceHostFactory, который переопределяет CreateServiceHost.

Например, если у вас есть класс GlobalErrorHandlerBehaviour, который реализует IServiceBehavior, тогдаВы можете подключить его следующим образом:

public class CustomWebServiceHostFactory : WebServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(System.Type serviceType, System.Uri[] baseAddresses)
    {
        return ApplyGlobalErrorHandler(base.CreateServiceHost(serviceType, baseAddresses));
    }

    private ServiceHost ApplyGlobalErrorHandler(ServiceHost serviceHost)
    {
        serviceHost.Description.Behaviors.Add(new GlobalErrorHandlerBehaviour());
        return serviceHost;
    }
}

Затем вы обновите свой вызов до конструктора ServiceRoute, чтобы передать его в эту пользовательскую фабрику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...