gpt4 book ai didi

c# - 检查服务是否挂起的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 23:23:34 25 4
gpt4 key购买 nike

我有一个关于如何最好地检查服务是否仍在运行的问题。

首先要澄清一点。我拥有的服务是一个 C# 应用程序,它可以从命令行运行,也可以作为 Windows 服务运行。该服务的功能是检查对远程 3rd 方数据源的更改并在将它们添加到我们自己的本地数据存储之前处理这些更改。

我希望能够识别服务何时因任何原因停止运行,并在这种情况发生时尽可能自动地通知某人。无论服务是作为 Windows 服务运行还是从命令行运行,都需要发生这种情况。

我已经考虑过监视本地数据存储的变化,并在一段时间内没有发生变化时发出通知,但是事实证明这有点太不一致了,因为第三方数据的变化频率source 是可变的,这意味着长时间没有变化并不一定表示服务已经停止工作,它可能只是没有变化!

关于我如何监控它有什么建议吗?任何人都有使用类似东西的经验吗?

谢谢,M

编辑 1只是粗略地了解服务的工作原理:当新的/更新的数据可用时,第 3 方服务会引发事件,因此我的服务会等待引发这些事件并处理引发的事件中返回的数据。因此,这就是为什么很难确定什么时候“没有变化”而不是“服务崩溃”的原因。

编辑 2我想我需要更清楚一点:进行此监视的主要原因是通知用户有关服务或与第 3 方服务的连接的潜在问题。该服务本身是单线程的,并具有适当的异常处理和日志记录。该服务可能会在某处的服务器上运行,因此如果该服务有任何问题,并且无论出于何种原因服务需要通知某人,它都会停止更新我们的本地数据存储。

最佳答案

你可能想考虑像“心跳”这样的东西:

Heartbeat activity for Windows Service

但是您的主要考虑应该是弄清楚为什么您的服务应该能够停止/挂起?所有异常都需要被捕获,在最坏的情况下,在短暂等待后将您的服务重置为启动状态,以防止 CPU 最大化。

Windows 本身也有多种方法可以帮助:

Start > Run > Services.msc > Right Click Service > Properties > Recovery Options

如果您将应用程序设计为正确使用异常并适本地处理它们,那么您的服务“由于某种原因而挂起”永远不会出现问题。

附加:

您没有办法确定“不需要工作”和挂起之间的区别吗?

关于c# - 检查服务是否挂起的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com