我们开发了一些长期运行的 C# 控制台应用程序,这些应用程序将由 Windows 计划任务运行。
这些应用程序可能在 Intranet/Extranet 上的许多不同服务器机器上运行。我们无法确保它们在一台机器上运行,因为每个应用程序可能需要访问某些资源,这些资源仅在特定机器上可用。
尽管如此,所有这些应用程序都使用通用 WCF 服务来访问数据库。
我们需要确保在任何时候只有一个应用程序的实例在运行。由于应用程序可能位于不同的外联网计算机上,我们不能使用每台机器互斥锁或 MSMQ。
我考虑过以下解决方案 - 超时的 WCF Mutex 服务。当一个应用程序运行时,它会检查它是否已经启动(可能在另一台机器上),然后(在专用线程中)定期 ping WCF Mutex 服务以更新时间戳(如果 ping 失败,应用程序立即退出)。如果时间戳过期,这意味着应用程序已经崩溃,所以它可以再次运行。
我想知道,如果这个“WCF 互斥锁”是我的问题的最佳解决方案。也许已经有一些第三方库已经实现了这样的功能?