我們的應用程序調用外部服務,如是否有可能跟蹤所有傳出的WCF呼叫?
//in client factory
FooServiceClient client = new FooServiceClient(binding, endpointAddress);
//in application code
client.BarMethod(); //or other methods
是否可以跟蹤所有這些調用的(例如,通過事件或類似的東西),這樣應用程序可以收集如呼叫的數量,響應時間等方面的統計?請注意,我的應用程序本身需要訪問這些值,不僅要寫入日誌文件。
我能想到的是創建VisualStudio中產生FooServiceClient的一個子類,然後添加這樣
override void BarMethod()
{
RaiseStart("BarMethod");
base.BarMethod();
RaiseEnd("BarMethod);
}
和RaiseStart和RaiseEnd方法的代碼將提高,將通過我的代碼被傾聽的事件。
但是,這似乎很乏味(因爲有很多方法可以覆蓋),並且有很多重複的代碼,我的代碼需要在服務協議發生變化時進行更改等。是否有更簡單的方法來實現這一點,例如通過使用反射來創建子類,或者通過點擊WCF中的內置方法(如果有的話)?
cool ..但似乎用IClientMessageInspector我們不能得到任何東西,如果消息超時,例如由於無法訪問服務器。你知道如何也觀察這種錯誤發生的時間嗎? – 2013-04-16 06:55:05
我不確定是否誠實,如果調用操作時服務器上有任何錯誤,客戶端會收到答覆,並且您可以在IClientMessageInspector.AfterReceiveReply中捕獲它們,因爲消息的IsFault屬性爲true。如果客戶端無法訪問服務器,我不確定您是否仍會收到錯誤的回覆。 – Matt 2013-04-16 23:11:11