Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何确定服务的一个实例已关闭并启动新实例_.net_Design Patterns - Fatal编程技术网

.net 如何确定服务的一个实例已关闭并启动新实例

.net 如何确定服务的一个实例已关闭并启动新实例,.net,design-patterns,.net,Design Patterns,哎 我有以下情况:WinService正在处理队列中的某些内容,在处理过程中写入其他表,完成后删除条目并移动到下一个表 我需要一种机制来确定实例是否处于活动状态,是否启动或唤醒第二个实例 到目前为止,我一直认为有两个实例正在进行,每个实例都试图从队列中提取内容并进行处理(尝试-就像看看它是否可以-就像没有设置keepAliveFlag或记录的lastUpdateDate是很久以前)。当他们处理相同的记录时,可能会出现这种情况——这是缺点 对于上述建议的解决方案,我还需要一种机制,以防实例尝试编写

哎 我有以下情况:WinService正在处理队列中的某些内容,在处理过程中写入其他表,完成后删除条目并移动到下一个表

我需要一种机制来确定实例是否处于活动状态,是否启动或唤醒第二个实例

到目前为止,我一直认为有两个实例正在进行,每个实例都试图从队列中提取内容并进行处理(尝试-就像看看它是否可以-就像没有设置keepAliveFlag或记录的lastUpdateDate是很久以前)。当他们处理相同的记录时,可能会出现这种情况——这是缺点

对于上述建议的解决方案,我还需要一种机制,以防实例尝试编写keepAliveFlag但未能成功停止

除了这个解决方案之外,还有一个解决方案,该实例不断地将内容写入数据库,第二个实例检查是否写入了新内容,如果没有,则唤醒或启动第二个实例。但可能会出现几个问题:如果前主人醒来会发生什么?一般来说,第二种情况似乎更难正确实施


现在的问题是:实现这一点的正确模式是什么?

服务在Windows系统中是单例的。支持多个实例的唯一方法是安装多个具有不同服务名称的相同二进制文件


您可以使用
[ServiceController][1]
类监视任何给定服务的状态,使用其确定当前状态并相应地采取行动。

我的一个团队目前正在做的是:

  • 在每台计算机上安装一个监视器实例(本身就是Windows服务)
  • 此监视器读取(从中央数据库)它应该监视的列表
  • 它还读取其监控的每个本地服务的工作/非工作时间
  • 然后,它监视每个服务的常规心跳(和其他状态消息)
  • 如果本地服务在其工作时间内未启动,监视器将启动它
  • 如果本地服务正在运行但没有心跳,监视器将重新启动它
  • 监视器在数据库中记录每个服务的状态,并根据需要发送信息/警告/警报消息

我想问一个关于您的DB访问模式的单独问题-上面的标题不会引起正确的人的注意。这实际上是两个独立的问题,是吗?现在我反复思考,问题是我正在考虑在两台独立的机器上安装两个实例,以防出现硬件故障问题,所以我们再次回到在两台独立的机器上运行的两个实例。有什么好的设计模式可以查看一台机器是死机还是闲置,并从另一台机器启动或激活另一台机器?很抱歉误导了你,但我不太确定要考虑什么。硬件故障就是其中之一。Thanks@MadalinaA-您可能可以使用
System.Management
构建一些东西,但在这种情况下,我倾向于使用
ServiceController.Status
定期轮询实例,以确保它们仍然处于活动状态。如果没有,你可以做任何你想补救的事情。若您想要对中断做出最快的响应,那个么通过WMI的事件驱动方法将是更好的,但更难。