2009-02-19 74 views
1

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

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

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

感谢

回答

1

我建议看WCF等信道(System.Net.PeerToPeer),以便每个节点知道有关的其他节点。这是一个link,提供了一个体面的介绍。

至于确定哪个节点应该成为主节点,这个技巧将在两个或多个节点几乎同时在线时协商哪个节点应该是主节点。一旦节点相互了解,就需要一些确定性机制来建立主节点。例如,您可以使用最早的创建时间,每个节点IP地址的最后一个八位字节的最低值,或者任何其他值。您只需要定义一些允许节点自动协商的方案。

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