WCF客户端切换和故障转移能力的设计模式?

7
我希望找到一种最佳实践或经常使用的设计模式,用于WCF通信,允许在WCF(或初始服务)不存在时进行通信并故障转移至另一个服务或本地信息服务。
我不确定这是否有太多意义,所以让我举个例子。我希望这个代理能够连接到一个WCF服务,并(希望)将合同方法暴露给调用者(UI/BO等),以便该对象可以调用这些方法。代理尝试连接到主要服务(可能是WCF),如果连接失败,则连接到次要服务。
理想情况下,所有故障转移和重新连接逻辑都应包含在代理中。
是否有一种设计模式可以封装“具有故障转移的切换WCF客户端”?也许不是设计模式,有人推荐一个不错的方法吗?
3个回答

4
我会这样做:
  • 客户端的配置只引用了服务的一个地址
  • 客户端有一个代理类,用于与服务通信
  • 在代理类中有一个try catch块
  • 在try块中设置主服务的地址并调用服务
  • 如果失败,程序将进入catch块,在此处您可以设置备份服务的地址并调用它。

3
Juval Lowy撰写了一篇关于WCF Discovery协议的优秀文章: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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接