WCF错误处理程序异常日志记录

时间:2011-03-04 10:32:10

标签: c# wcf exception-handling

我在项目中使用IErrorHandler来处理异常。

但是我怎么能用异常记录传入的方法参数。 我想获取用于记录的Request参数。

样本方法:

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

3 个答案:

答案 0 :(得分:4)

您可以收到如下请求消息:

Message requestMessage = OperationContext.Current.RequestContext.RequestMessage;

我通常做的是记录整个请求XML。

答案 1 :(得分:0)

两种方式:

  1. 本机WCF记录器将捕获所有请求&但是,当设置为详细时,这些文件往往变得非常快,真正快速。

  2. 使用log4net(搜索谷歌下载)

    private static readonly 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);
        }
    }
    

    }

答案 2 :(得分:0)

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

操作调用程序负责选择正确的服务操作并将其调用。这只是想法 - 我还没有测试过它。