2011-03-04 116 views
1

我在我的项目中使用IErrorHandler处理异常。WCF错误处理程序异常记录

但我如何记录传入的方法参数,例外。 我想获取用于记录的请求参数。

抽样方法:

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

回答

0

两种方式:

  1. 本机WCF记录器将捕获所有请求&响应设置然而,长篇大论的时候,这些文件往往会得到真正的大,真正的快。

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

    私人静态只读ILog的日志= 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

这不会回答如何在实现IErrorHandler来处理异常的类中记录请求。 – 2014-12-02 17:46:18

4

你可以得到这样的请求消息:

Message requestMessage = OperationContext.Current.RequestContext.RequestMessage; 

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

0

您在IErrorHandler中没有此类信息 - 您只能在ProvideFault方法中解析原始消息。

你可以尝试用另一种方法 - 实现自定义IOperationInvokerInvoke方法做这样的事情:

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

操作调用负责服务选择正确的操作和ivoke它。这只是想法 - 我没有测试过它。