Ведение журнала исключений обработчика ошибок WCF - PullRequest
1 голос
/ 04 марта 2011

Я использую IErrorHandler в своем проекте для исключений дескрипторов.

Но как мне зарегистрировать входящий параметр метода с исключением. Я хочу получить параметр запроса для регистрации.

Пример метода:

public Response GetData(Request request) {
    return new Response();
}

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Вы можете получить сообщение с запросом так:

Message requestMessage = OperationContext.Current.RequestContext.RequestMessage;

Обычно я регистрирую весь запрос XML.

0 голосов
/ 04 марта 2011

У вас нет такой информации в IErrorHandler - вы можете только разобрать необработанное сообщение в методе ProvideFault.

Вы можете попробовать использовать другой подход - реализовать пользовательский IOperationInvoker, а в методе Invoke сделать что-то вроде:

// Just synchronous implementation - for asynchronous handle InvokeBegin and InvokeEnd
public object Invoke(object instance, object[] inputs, out object[] outputs)
{
  try
  {
    // Run common invoker - you will create new Invoker as decorator for existing one.
    return innerInvoker.Invoke(instance, inputs, outputs);
  }
  catch(Exception e)
  {
    // Handle error here
  }
}

Операция invoker отвечает за выбор правильной работы в сервисе и его вызов. Это просто идея - я не проверял это.

0 голосов
/ 04 марта 2011

Два способа:

  1. Собственный регистратор WCF будет захватывать все запросы и ответы, когда задан как подробный, однако эти файлы имеют тенденцию становиться очень большими, очень быстрыми.

  2. Используйте log4net (поиск в Google для загрузки)

    приватная статическая только для чтения ILog log = LogManager.GetLogger (typeof (MyClass));

    public class MyClass
    

    { ...

    public Foo DoSomething(string arg)
    {
        try
        {
           //do something
        }
        catch(Exception e)
        {
           log.error(string.format("{0} Arguements: {1}", e.Tostring(), arg);
        }
    }
    

    }

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