2010-01-03 65 views
7

我有一個WCF服務和客戶端。我經由檢查WCF連接

ChannelFactoryBase <連接到WCF(中 <(TChannel>)>).. ::。CreateChannel 方法

然後,我有一個參考ICommunicationObject

WCF服務連接或稍後關閉時可能不起作用。什麼是正確的 方法來檢查WCF服務是否正在工作。一種直接的方法是使用CommunicationException機制。但是ICommunicationObject.State屬性呢?我應該在任何WCF方法調用之前檢查它是否爲 處於故障狀態?什麼是最佳做法?

+0

從用戶@Stix,每[MSDN](https://msdn.microsoft.com/en-us/library/ms733912(V = vs.110)的.aspx):檢查ICommunicationObject.State屬性的值是一種競爭條件,不建議確定是重用還是關閉頻道。 – 2015-09-29 19:59:47

回答

13

沒有什麼神奇的方法來檢查WCF服務是否工作 - 除了調用它,並正在準備處理中產生的,如果它不工作異常。

ICommunicationObject.State只會告訴你,客戶端和服務器之間的通道是「故障」的,如果以前的操作導致錯誤並且錯誤在服務器上沒有正確處理(並且因此通道「出現故障「,例如變得無用)。

你可以 - 如果你控制線的兩端 - 包括一個「虛擬」的ping方法(或類似返回服務的版本號),以便能夠先調用類似的東西,所以只要看看溝通渠道依然活着。

但後來:什麼是第一次調用MyService.Ping()和必須處理可能出現的異常,如果服務不活的,然後調用您的實際方法,而不是隻調用MyService.MyMethod()並處理任何相關的異常真正受益?

+0

謝謝, 我不知道爲什麼有ICommunicationObject.Faulted事件 和ICommunicationObject.State財產?如果我能以某種方式使用它們 – 2010-01-03 16:58:14

+0

可以處理「故障」事件,以便馬上通知有故障的信道,例如,例如,您可以重新創建代理。國家不僅僅是「Faulted」狀態,但它並沒有提供服務是否「活着」的暗示。 – 2010-01-03 20:53:06

+1

如何調用Proxy.Open()? – 2013-04-28 10:13:17