C# Windows服务的心跳活动

C# Windows服务的心跳活动,c#,windows-services,C#,Windows Services,我有许多Windows服务(用C#4.0编写),它们以不同的时间间隔连接到数据库并执行各种复杂任务。其中一些任务每天仅每隔X小时执行一次。但是,服务器支持团队希望知道Windows服务是否正在实际运行,因为任务之间可能存在较大的间隔。他们希望每个Windows服务都有一个心跳信号。每隔5分钟,Windows服务将执行Microsoft System Center Operation Manager(SCOM)可以监视的操作。任何解决方案都必须由SCOM轻松监控,因为服务器支持团队依赖它 实现这类

我有许多Windows服务(用C#4.0编写),它们以不同的时间间隔连接到数据库并执行各种复杂任务。其中一些任务每天仅每隔X小时执行一次。但是,服务器支持团队希望知道Windows服务是否正在实际运行,因为任务之间可能存在较大的间隔。他们希望每个Windows服务都有一个心跳信号。每隔5分钟,Windows服务将执行Microsoft System Center Operation Manager(SCOM)可以监视的操作。任何解决方案都必须由SCOM轻松监控,因为服务器支持团队依赖它

实现这类功能的最佳方法是什么?我考虑过使用性能计数器,并让SCOM监听这些计数器,但不确定这是否是性能计数器的最佳使用


更新(完全忘记包含):当前,每个服务都会将此操作写入数据库,但SCOM不太擅长监视数据库记录和区分哪个服务正在执行什么操作等。

简单地写入数据库或事件日志怎么样?

您可以将SNMP或WMI检测添加到您的服务中-顺便说一句,这将允许您提高更多不仅仅是心跳消息——例如,当遇到需要重试操作的瞬时故障时,您还可以引发事件


有很多SNMP库,WMI支持内置在.NET framework中。

仅供参考,我正在研究这个问题,因为我是如何做到的,服务应用程序在轮询Db以获取新作业时,每X秒记录一条hearbeat消息。在午夜,所有超过一周的心跳消息都会从日志中删除。我确实有一个应用程序计划在早上7点检查最后一条心跳消息的发送时间,但是看起来我必须经常运行它来定期检查。。。如果出现问题,请通知Solar Winds发送警报。

如果您的案例仅限于服务运行状况检查,我很确定这可以通过windows工具(如windows performance monitor)完成。收集他们的数据应该比在通常断开连接的环境中创建心跳更容易

有很多服务器和服务监视工具。它们中很少有是开源的,您可以选择它作为初始步骤。

Operations Manager可以作为一项功能。您不应该在代码中实现任何附加内容。看看这个helps@ValAkkapeddi是的,我知道Operations Manager和SCOM可以查看服务是否正在运行、停止、暂停,但如果我的服务正在运行并且由于某种原因没有执行其任务,该怎么办。我想让SCOM知道我的任务是否正在执行。@ScottWylie我明白了,那么在这种情况下,性能计数器看起来并不是一个好办法。您甚至可以设置智能指标,如任务执行时间或您所拥有的帮助您的支持团队更主动地识别和解决问题。抱歉,请参阅更新的问题。这是由DB现在完成的,它不能很好地与SCOM一起工作。如果此DB有一个包含两列的表:servicename和heartbeattime,该怎么办?每个服务将每x分钟更新一次