2010-10-08 90 views
3

我正在爲實驗室改變航運,希望能幫助診斷我們看到的一些奇怪的通道故障怪異。有一個測試應用程序使用DuplexChannelFactory連接到一對夫婦的Windows服務,出於某種原因,這個測試應用程序的通道看起來似乎有點錯誤。我計劃在那裏實施一些重試邏輯,但是弄清楚他們爲什麼會發生故障將會很好。WCF:如何診斷故障通道?

我知道,通道工廠和代理對象都實現了大量的接口,我用反射鏡通過其中的一些爬行,但我還沒有找到喜歡什麼,我在尋找什麼。有沒有辦法在這些對象發生故障後查詢這些對象,以便獲取有關導致故障原因的一些信息?

編輯:配置是非常基本的 - 綁定只是默認構建的NetTcpBinding,服務實現有[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)],服務合約中的任何操作都沒有特殊屬性。不過,我在詢問有關診斷通道故障的一般技術的更多信息,而不是診斷這個特定情況。我不希望配置細節對此有太多影響;如果有的話,配置細節將會被所述診斷返回,對吧?

+0

我不認爲你的信息是足夠的。提及正在使用的協議(綁定配置有幫助),一個服務的樣本,客戶端的創建方式,... – Aliostad 2010-10-08 16:41:44

+0

感謝您的更新,我會盡快回復您。 – Aliostad 2010-10-08 18:05:10

回答

4

拉吉斯拉夫和設拉子的回答都不錯,我已經給了他們+1。

我可以添加到他們的通常是一個故障通道是服務器上的未處理的異常的結果。當發生這種情況時,WCF認爲服務器出現了一些根本性錯誤,並使通道出現故障,導致無法使用。

正確的做法 - 我相信應該是默認和前來免費 - 是服務捕獲異常,並創建一個FaultException異常並返回它(看這個形式例如http://www.c-sharpcorner.com/UploadFile/ankithakur/ExceptionHandlingWCF12282007072617AM/ExceptionHandlingWCF.aspx

原因WCF不會默認的是它會更改合同和WSDL,因此客戶端必須獲取更新的WSDL。

所以,如果我是你,我會趕上例外,記錄它們,然後返回一個錯誤例外,這樣我就知道是什麼問題和渠道不出現故障。

3

的第一件事是它這個測試應用程序,或者是被其他客戶端使用的特定服務。

假設它是引起問題的測試客戶端。可能有兩個問題:

  • 不關閉代理,因此達到與服務器的最大連接。
  • 當它們處於失敗狀態時不中止代理。
+0

出現故障通道的最可能原因是服務器端異常。 – Aliostad 2010-10-09 09:27:37

2

您正在查找的診斷工具叫做WCF Tracing。它通常顯示頻道爲何出現故障。您可以在客戶端和服務器上對其進行配置,並使用SvcTraceViewer.exe瀏覽收集的跟蹤。

+0

1+我想提到它。 – Aliostad 2010-10-09 09:27:04

0

你有沒有迷上ICommunicationObject.OnFauled

+0

我有,但爲了我的生活,我可以發誓它什麼都不做。即使該通道故意故障服務器端,客戶端上也沒有任何反應。看起來不太有用。我假設有一些配置細節我錯過了,使其工作或什麼。 – bwerks 2010-10-10 20:23:34