2011-03-04 118 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它。這只是想法 - 我沒有測試過它。