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

时间:2008-10-20 13:34:38

标签: c# .net

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

由于

乔恩

4 个答案:

答案 0 :(得分:2)

“未挂起”始终是最终检测的难选条件,并且取决于您的服务细节。

通常,可以使用任何形式的进程间通信。一种简单的方法是创建命名的共享内存映射,并只是定期从服务中向其写入信息。另一个进程可以监视共享内存并查看其状态是否停止更改。

此方法的优点是您可以扩展共享内存块以包含可能有助于诊断任何问题的其他诊断。

答案 1 :(得分:2)

一种方法是您可以在.NET中创建自己的性能计数器:

http://msdn.microsoft.com/en-us/library/5e3s61wf(VS.71).aspx

然后将计数器与带有计时器的“秒活动”绑定。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

我使用的服务还包含写入日志的文本日志。此外,对于即将“睡了一会儿”的服务,我会记录下次唤醒的时间。我使用MTAIL来查看输出日志。