2012-11-21 29 views
1

我有一個需求,我需要在同一時間運行自定義窗口服務代碼的兩個實例,但只有一個應該做的工作,直到另一個失敗或死亡。如何創建故障轉移窗口服務?

我想要拿出乾淨和簡單的設計來做到這一點。

一個辦法:

  1. 創建臨時表
  2. ,並通過該表有這樣的兩個服務相互交談
  3. ,如果運行一個下降,使用可能最後修改日期 時間在桌子上
  4. 那麼其他人會開始

但這是很手冊。我正在使用C#4.0。

有沒有更好的方法來實現這個目標?

我看到有像EventWaitHandle這樣的東西,但不知道它是否會很容易使用它。

感謝 〜米

+0

WaitHandle只在你的服務還活着時才起作用,否則句柄不會被觸發。反思...如何檢測服務是否停止? – lboshuizen

+0

毫米我希望它可以在關機或異常時自動觸發重置事件?所以它不?它是否可以在同一網絡內的不同機器上工作? – melaos

+0

不會殺死第一個服務殺死第二個服務嗎? –

回答

-1

考慮暴露於兩種服務ping命令API端點(簡單REST API平方法),使得每一個都可以監視其他的服務狀態。

+0

它可以跨越差異機器嗎? – melaos

+0

沒有mutex只能在一臺機器上工作 – shf301

+0

那麼這對我這裏的目的沒什麼用處...... :( – melaos

0
  1. 實現利用公共數據庫的一種鎖定/互斥的(如你所提到的)
  2. 如果不同的服務器上的情況下,相互瞭解(配置?),他們可以互相聊天,並決定誰是老闆。
  3. 如果實例不知道對方,請嘗試使用UDP廣播向對方宣佈自己,然後決定誰是老闆。

如果您能夠做到#1並通過Web服務進行通用公開,那麼該解決方案也可以用於其他應用程序。我自己使用這樣的解決方案。