如何创建故障转移窗口服务?

时间:2012-11-21 03:26:13

标签: c# windows-services high-availability

我有一个要求,我需要在同一时间运行两个自定义窗口服务代码实例,但只有一个应该正在进行工作,直到另一个失败或死亡。

我试图想出干净简洁的设计来做到这一点。

单步:

  1. 创建临时表
  2. 并通过表
  3. 让这两个服务相互通信
  4. 如果正在运行的那个下降,可能使用上次修改日期 在桌子上的时间
  5. 然后另一个将开始
  6. 但这是非常手动的。我正在使用c#4.0。

    有更好的方法来实现这一目标吗?

    我看到EventWaitHandle之类的内容,但不确定使用它是否简单。

    感谢 〜米

2 个答案:

答案 0 :(得分:0)

  1. 使用公共数据库(如您所述)实现一种锁/互斥锁
  2. 如果不同服务器上的实例彼此知道(配置?),他们可以互相聊天并决定谁是老板。
  3. 如果实例彼此不知道,请尝试使用UDP广播向对方宣布自己,然后决定谁是老板。
  4. 如果您能够做#1并通过Web服务进行通用,那么该解决方案也可以重复用于其他应用程序。我自己使用这样的解决方案。

答案 1 :(得分:-1)

考虑在两个服务上公开ping api端点(简单的Rest API ping方法),以便每个服务都可以监视其他服务状态。