确定.NET Windows服务是否未挂起的最佳方法是什么?

4

什么是主动监视.NET Windows服务是否仍在运行(例如未挂起)的最佳方法?该服务需要定期响应由计时器引发的事件。

谢谢,

Jon

4个回答

2
“未挂起”始终是一个难以确定的条件,这取决于您的服务的详细信息。一般来说,任何形式的进程间通信都可以使用。一个简单的方法是创建一个命名的共享内存映射,并定期从您的服务向其写入信息。另一个进程可以监视共享内存,并查看其状态是否停止更改。这种方法的优点是您可以扩展共享内存块以包括其他诊断,这可能有助于诊断任何问题。

2

0
显而易见的解决方案似乎是检查它是否仍在响应。因此,添加一个低频看门狗定时器。我不知道您想要监视生命力的位置,但在大多数地方,您应该能够从命名管道中读取。然后将看门狗定时器事件转换为对命名管道的写入。如果您没有观察到读取,则知道您的服务未能响应至少一个定时器。

0

你可以创建一个命名事件或互斥体,然后在代码执行时切换它。然后外部程序可以看到这个脉冲作为程序正在运行的指示。

我还使用了在另一个线程中运行的内部看门狗系统。该线程查看主线程的活动,例如日志输出或切换事件。如果没有看到活动,则认为服务已挂起,我会关闭服务。在这种情况下,您可以配置Windows自动重新启动停止的服务,这可能会清除问题(只要不是内部逻辑错误)。

我所使用的服务还有写入日志的文本日志。此外,对于即将“休眠一段时间”的服务,我记录下下次唤醒的时间。我使用MTAIL来监视输出日志。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接