如何在服务控制器和服务/守护进程之间进行通信?

时间:2010-04-20 12:55:42

标签: c++ c windows-services

很容易显示Windows服务的状态或从GUI应用程序控制它(启动/停止),但问题是如何从服务接收/发送通知?比如:服务告诉用户监控它需要注意。

请考虑您可以在多用户环境中随时启动多个控制器。

你知道这种沟通的一个例子(开源)吗?

独立于平台的解决方案的额外要点:)

2 个答案:

答案 0 :(得分:0)

如果监控服务的“用户”是一个人,那么如何写入事件日志然后让企业事件监控系统发送警报。或者,让服务将问题记录到事件日志中,然后发送电子邮件。

如果服务的“用户”或客户是单独的或多个应用程序,这里有几个想法,但没有完全解决您的问题。

  1. 写入文件。让客户端告诉服务什么文件或某些约定的令牌为该特定客户端实例创建文件,然后让服务写入该文件。然后,客户端可以监视该文件。
  2. 状态Ping。让客户端在后台线程中定期ping服务,询问服务的工作方式。如果不健康,那么客户端可以ping服务以获取更多信息。有点像获得LastMessage。
  3. 打开套接字或端点。找到一种从服务设置回来的方法,以便服务可以调用客户端。这可能是由客户端首先告诉服务所在的位置,以便可以回拨。我忘记了具体细节,但是WCF应该能够为您提供开箱即用的功能。如果你想要更通用的东西,你可能需要自己动手。
  4. 希望这些想法有所帮助。

答案 1 :(得分:0)

作为一种选择,使用我们的MsgConnect(免费来源)在服务和控制器之间发送消息(跨平台)。服务和控制器之间的通信既可以在本地(通过MMF或套接字传输)也可以远程(通过套接字传输)进行。