Mo *_*o D 5 c# service monitoring
我有一个问题,如何最好地检查服务是否仍在运行.
首先澄清一下.我的服务是一个C#应用程序,可以从命令行运行,也可以作为Windows服务运行.该服务的功能是检查对远程第三方数据源的更改,并在将这些更改添加到我们自己的本地数据存储之前处理这些更改.
我希望能够确定服务何时因任何原因停止运行,并尽可能自动地通知某人.无论服务是作为Windows服务运行还是从命令行运行,都需要进行此操作.
我已经考虑过监视本地数据存储的更改并通知在一段时间内没有发生更改,但事实证明这有点太不一致,因为第三方数据源的更改频率是可变的,这意味着长期缺乏变化并不一定表明服务已停止工作,可能只是没有变化!
关于我如何监控这个问题有什么建议吗?任何人都有类似的经验吗?
谢谢,M
编辑1 只是为了大致了解服务的工作原理:当新的/更新的数据可用时,第三方服务会引发事件,因此我的服务就会等待引发这些事件并处理引发事件中返回的数据.因此,这就是为什么识别"没有变化"而不是"服务崩溃"的原因很棘手.
编辑2 我认为我需要更清楚一点:这种监控的主要原因是通知用户有关服务或与第三方服务的连接的潜在问题.服务本身是单线程的,具有适当的异常处理和日志记录.有可能这项服务将在某个服务器上运行,所以如果服务有任何问题,它会因为服务需要通知某人的原因而停止更新我们的本地数据存储.
你可能想要考虑像'心跳'这样的东西:
但您的主要考虑应该是解决为什么您的服务应该能够停止/挂起?需要捕获所有异常,并且在最坏的情况下,在短暂等待后将服务重置为其启动状态以防止CPU最大化.
Windows本身有多种方法可以帮助:
Start > Run > Services.msc > Right Click Service > Properties > Recovery Options
Run Code Online (Sandbox Code Playgroud)
如果您将应用程序设计为正确使用异常并适当地处理它们,那么您的服务"由于某种原因"挂起就不应该有问题.
额外:
你有没有办法确定"不需要工作"和挂起之间的区别?
归档时间: |
|
查看次数: |
4414 次 |
最近记录: |