【发布时间】:2011-09-27 03:04:03
【问题描述】:
我正在设计一个维护进程列表的 Windows 服务。它可以在它们上运行任务。例如 - 停止特定进程(在其列表中)、重新启动特定进程、运行新进程并将其添加到列表中,等等。
此 Windows 服务由 Web 应用程序通过 WCF 服务控制 - Windows 服务运行 WCF 服务,并且 Web 应用程序连接到该 WCF 服务。 WCF服务导出Restart(int id)和Stop(int id)等方法。
我有几个问题:
-
当进程意外关闭时(例如,由于内部错误),服务应该更新某个数据库中的值。现在,要做到这一点,我只是有一个线程,它每 30 秒检查一次进程是否正在运行。
这是这样做的权利吗?我应该使用
Exit事件吗? -
当服务关闭时,出于任何原因,它维护的所有进程也将关闭。这样做的正确方法是什么?
我正在考虑在调用服务的
OnClose()时循环遍历列表并终止所有进程。问题在于OnClose()事件并不总是被调用。例如,如果服务意外关闭怎么办?它不会调用OnClose()。 -
我应该如何表示每个任务(例如 - 重新启动进程或停止进程)?
现在我正在使用
System.Threading.Tasks。方法对吗?
此服务应具有高度可扩展性,且错误最少。
谢谢。
【问题讨论】:
-
听起来好像是在重新发明 Windows 服务控制管理器?
-
SCM 的问题是它不可扩展。在我的服务中,我也有自定义方法,不仅仅是“重启”和“停止”。
-
然后简单地编写一个自定义应用程序。将这些消息发送到 SCM 托管进程。 Windows 服务支持此模型。
标签: c# multithreading wcf process windows-services