如何测试Windows服务的反应性?

时间:2010-06-30 10:29:42

标签: c# windows-services monitoring

我正在编写一个需要显示多个Windows服务状态的监控应用程序。在当前版本中,我可以知道服务是运行,已停止,已暂停还是处于其中一个待处理状态。这很好,但我想知道是否有办法测试服务是否实际响应?我想它可能处于运行状态但根本没有响应!

我正在使用ServiceController中的System.ServiceProcess课程。您认为如果服务没有响应,ServiceController.Status会返回异常吗?

你会如何处理这个问题?

由于

修改 似乎:ServiceController.Status可以返回两种类型的异常:

System.ComponentModel.Win32Exception: An error occurred when accessing a system API.
System.InvalidOperationException: The service does not exist as an installed service.

没有关于反应性的信息。

2 个答案:

答案 0 :(得分:2)

服务控制器类型和API只能根据服务对这些API的响应提供信息。

E.g。您可以创建一个正确响应这些API的服务,但在偶数小时内不提供任何功能。

最后,您需要根据服务功能定义“响应”(例如批处理器正在处理批处理)并提供一种机制(A2A API,WMI,性能计数器)来表示这一点。

答案 1 :(得分:2)

这可能很明显,但您是否尝试与服务交谈

没有通用的方式与服务通信,因此Windows无法询问服务是否仍在正常响应。服务进入完全睡眠状态等待外部I / O发生是完全正常的,因此当服务实际处于活动状态并且功能完全符合设计时,Windows将无法获得响应。

唯一的方法是实际向其发送请求,并等待响应,为此您需要一些进程间通信通道,如:

  • 网络
  • 命名管道
  • 消息

基本上,如果您需要确定服务是否能够响应,您需要检查它是否正在响应。