2010-09-29 83 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