2012-04-24 107 views
0

我可以在這裏看到類似的問題,但沒有特別的相同。在服務器上記錄WCF請求的請求和響應值

我有一個WCF公共API,客戶端可以使用API​​密鑰進行查詢。因此,像:

string GetDataForRegion(string apiKey, int regionId); 

我需要能夠與發送回客戶端的數據一起記錄這些請求。我可以使用IDispatchMessageInspector得到響應,但我看不到請求參數。

我可以看到這是可能的使用IParameterInspector但我怎麼把請求和響應結合在一起?

理想情況下,我想寫這樣的日誌(在DB):

日期時間,APIKey,MethhodCalled,參數,響應

SP,使用上面的例子,這將會是:

2012-04-24-15-52-11,myapikey,GetDataForRegion,{regionId:1},[響應數據]

這是可能的內與WCF內置的東西?

感謝,

ķ

+0

你能不能只使用WCF跟蹤這一點,還是需要要記錄的一些自定義的形式? – 2012-04-24 19:55:06

+0

我看了看跟蹤,但輸出需要轉換成可以方便查看和查詢的格式。所以,可能需要寫入數據庫。解析跟蹤日誌到數據庫是在我的「希望我不必那樣做」解決方案列表。 – 2012-04-24 19:57:59

回答

3

IParameterInspector是你想要的。在服務器端,BeforeCall方法在調用用戶代碼之前調用,並且您可以從此方法返回狀態值(通常這將是Guid,但它可以是任何內容)。一旦您的服務運行並生成返回值AfterCall將被調用與匹配BeforeCall相同的狀態值。在客戶端,它基本上以相同的方式工作,除了在往返服務器之前和之後發生呼叫。

就你而言,分階段記錄信息可能是最容易的。在入站呼叫期間將請求數據插入數據庫,並從呼叫中返回一些唯一標識符(標識字段,時間戳等)。在回程中,用響應數據更新匹配記錄。例如,這也爲您提供了一個快速查看通話時間的方法,以及是否有任何呼叫未能返回。

這裏是一個簡短的介紹一下這些工作,代碼:

http://blogs.msdn.com/b/endpoint/archive/2011/04/28/wcf-extensibility-iparameterinspector.aspx

您還可以使用IDispatchMessageInspector出於同樣的目的,它的工作方式基本相同,但你必須撕開Message自己反對;參數檢查員可能是一個更好的選擇。消息檢查員功能更強大,並且似乎更常用,即使是對於「簡單」選項也是如此。見:

http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx

+0

看起來是最好的方式。我一直在尋找類似的東西,並填充來自IDispatchMessageInspector的響應,但在獲取數據時遇到問題(並且配置會很痛苦)。沒有意識到數據在IParameterInspector中可用,因此可以節省大量時間。謝謝! – 2012-04-24 22:29:31