2010-09-29 88 views
6

我期待識別WCF通信的最佳實踐或經常使用的設計模式,使得發生,如果WCF(或初始服務存在)故障轉移到另一個服務或信息的本地服務通信WCF客戶端切換和故障轉移功能的設計模式?

我不知道這很有道理,所以讓我舉個例子。 我希望這個代理能夠連接到一個wcf服務,並且(希望)將合約方法暴露給調用者(UI/BO等),以便這個對象可以調用這些方法,代理嘗試聯繫主服務(可能是WCF),如果它連接到輔助服務失敗。

理想情況下,所有故障轉移和重新連接邏輯都將包含在代理中。

是否有封裝「切換wcf客戶端故障轉移」的設計模式?
也許不是設計模式,任何人都推薦一個體面的方法?

回答

4

我會做這樣的:

  • 客戶端的配置有一個單一的參考服務
  • 客戶端具有與服務
  • 通信在代理類的代理類有一個嘗試catch
  • 在嘗試設置地址主服務的地址,並致電服務
  • 如果它失敗,你會進入catch塊,在這裏你可以設置地址爲ba ckup服務並調用它。
3

朱瓦爾·洛對WCF發現協議有很大的文章:http://msdn.microsoft.com/en-us/magazine/ee335779.aspx

概括地說,這個利用UDP的廣播機制,以發現實現一個指定的接口服務的位置。所以,這種模式可能是,當客戶上線時,它會發現服務的位置,並且在客戶和服務的生命中,他們會來回傳遞信息。如果服務提供者變得不可用,則客戶端可以恢復發現另一服務,然後繼續。

此模式允許管理員在客戶端上以最少配置設置無限備份服務。

2

我目前按照Shiraz的描述來運行。我有一個ServiceCaller類和一個Call方法,它封裝了一個委託,它是服務上的實際調用。在調用委託之前,我可以做一些其他的事情,並將它包裝在try catch中並集中處理錯誤。

http://www.lukepuplett.com/2010/07/adding-useragent-to-wcf-clients.html

在未來,我計劃使用NLB或MSMQ。爲什麼?那麼,故障轉移與負載平衡密切相關,所以我會從NLB開始。

試試這些文章;

http://msdn.microsoft.com/en-us/library/ms730128.aspx

http://www.devproconnections.com/print/net-framework2/load-balancing-and-scaling-your-wcf-services.aspx

祝你好運,讓我們知道您的身體情況如何。

Luke