如何处理wcf服务同步?

时间:2009-02-19 07:50:07

标签: wcf synchronization

我已经实现了一个wcf服务,现在,我的客户希望它有三个副本,在不同的机器上独立工作。主从方法。我需要找到一个能够实现行为的解决方案:

实例化的第一个服务“询问”另外两个“如果他们还活着吗?” - 如果不是,那么它就变成了一个主人,它就是那个在网上活跃的人。另外两个,一旦实例化,看到已经有一个主人活着,所以他们成了奴隶并开始睡觉。需要有一些机制来定期检查master是否已经死亡,如果是,则选择下一个活着的副本成为master(直到它分别变为死亡)

我认为这应该是一种建筑模式,所以我很乐意接受任何建议。

感谢

1 个答案:

答案 0 :(得分:1)

我建议查看WCF对等通道(System.Net.PeerToPeer)以便于每个节点了解其他节点。这是一个link,它提供了一个不错的介绍。

至于确定哪个节点应该是主节点,如果两个或多个节点几乎同时在线,则诀窍将是协商哪个节点应该是主节点。一旦节点彼此意识到,就需要有一些确定性机制来建立主节点。例如,您可以使用最早的创建时间,每个节点的IP地址的最后一个八位字节的最低值,或任何其他值。您只需要定义一些允许节点自动协商的方案。

最后,至于检查主人是否还活着,我建议使用here所述的基于事件的机制。主设备可以发送其他节点将注册的定期健康和状态事件。我在代码入口点放了一个try / catch / finally块,这样如果主机崩溃,它可以发布一个最终的MasterClosing事件,让奴隶知道它会消失。这没有考虑到系统崩溃,例如电源故障等。为了解决这个问题,请在从站中提供超时,以便在超时到期时,从站可以查询主站以查看它是否仍然存在。如果没有,奴隶可以使用您的确定性算法在他们自己之间进行协商,该算法应该是谁应该成为下一个主人。