在自身内重新启动Windows服务

时间:2011-02-11 09:56:56

标签: windows-services

我有一个Windows服务,只要用户向其发送一些数据,就会调用一些繁重的图像处理。因此,如果有多个数据,则数据排队并按顺序处理。然而,有时处理数据可能会进行折腾,并且处理在那里永远存在。不确定为什么会这样。当发生这种情况时,我希望自己重新启动服务,以便在服务重新启动时从队列中接下来一个服务器。我的问题是在自身内重启服务是个好主意吗?你能做到这一点还是有其他方法可以做到这一点?

萨普纳

2 个答案:

答案 0 :(得分:0)

正如Oded在评论中所说,如果服务挂起,它就无法重启。如果你能弄明白为什么它会挂起来并且完全停止挂起它会是最好的,但是假设由于某种原因这是不可能的。

我能想到的两个选项是,如果图像处理是在一个线程中完成的,并且它只是那个挂起的线程,那么你可能会有一个单独的“监视”线程来继续检查是否处理线程仍然很高兴,否则它会杀死它并重新启动它。或者,如果整个服务挂起,您可以使用单独的监视服务来执行检查和重新启动。

答案 1 :(得分:0)

你有三个任务:

  1. 检测到服务被卡住: 这可以用不同的方式完成,第一种方法是使用超时
  2. 重启服务: 可以通过单独的监视服务或由同一服务的另一个线程来完成
  3. 处理不同服务实例之间的任务队列: 您需要将任务队列序列化到磁盘,以便在重新启动服务时可以继续处理队列