C# 如何确保Windows服务进程始终运行?
我有一个Windows服务,它一次又一次地(在无限循环中)调用存储过程 代码如下所示:C# 如何确保Windows服务进程始终运行?,c#,.net,windows-services,C#,.net,Windows Services,我有一个Windows服务,它一次又一次地(在无限循环中)调用存储过程 代码如下所示: while(1) { callStoredProc(); doSomethingWithResults(); } 但是,在某些情况下,循环可能会被卡住而没有响应,但服务在技术上仍在运行 我设想有一些工具可以监控服务的运行状况,让运营团队知道如何重新启动服务 但在我的场景中,这不会有帮助,因为该服务在技术上仍在运行,但它被卡住了,无法继续 如果出现这种情况,确保此过程重新启动的最佳方法是什么 解决
while(1)
{
callStoredProc();
doSomethingWithResults();
}
但是,在某些情况下,循环可能会被卡住而没有响应,但服务在技术上仍在运行
我设想有一些工具可以监控服务的运行状况,让运营团队知道如何重新启动服务
但在我的场景中,这不会有帮助,因为该服务在技术上仍在运行,但它被卡住了,无法继续
如果出现这种情况,确保此过程重新启动的最佳方法是什么
解决方案是使用任务调度器来检查此进程的心跳,并在一段时间内没有心跳时重新启动服务吗?要让另一个单独的线程监视第一个进程的进度?Windows服务提供了各种解决问题1的方法。对于问题2,最好的办法是使用超时方法,如果服务需要超过X个时间来完成,它将重新启动或停止正在执行的操作(我不知道服务的性质,因此无法提供实现细节)
heartbeat的想法也会起作用,但是,这只是另一件需要管理/维护和安装的事情。是的。你需要循环来心跳如果我有一个超时,我如何用代码让服务自动重启,而不需要人工干预?我是否仍会引发错误,并且在我的恢复选项中,如果出现错误,请让服务重新启动?@HenleyChiu一个选项是在不同的线程中触发代码,并在该线程上有一个超时(有不同的实现方法),如果超时过期,则强制服务重新启动。但如何强制服务重新启动?通过抛出错误?