唤醒服务,与服务沟通

时间:2009-11-21 12:04:21

标签: c# winforms windows-services

前段时间我用定时器写了一个服务,每隔n分钟做一次动作。一切都是对的。但现在,我想编写一个服务,等待来自gui应用程序的信号,消息或其他东西来完成他的工作。

我希望我的进程能够节奏地睡觉(不是在无限循环中嗅闻),直到我的winforms应用程序告诉他“嘿,做事情并在工作完成时给我一个响铃”

有人可以给我一点注意力吗?

感谢。

5 个答案:

答案 0 :(得分:3)

您可以使用Windows Communication Foundation允许您的客户与您的服务进行通信,发送请求以及注册以接收来自现有正在运行的作业的进度事件。

答案 1 :(得分:3)

您需要使用进程间通信(IPC)。对于C#,这通常意味着.NET Remoting(在旧版本的.NET上)或Windows Communication Foundation(WCF) - 在较新版本的.NET上。

本质上,客户端应用程序连接到服务实现的接口,然后可以在其上调用方法,就像它在同一个进程中一样。

如果这太复杂,您可以使用服务等待的命名事件对象,以及客户端设置。

答案 2 :(得分:1)

起点:

自托管WCF服务

答案 3 :(得分:1)

任何IPC机制都有资格完成这项工作。如果您需要简单的消息传递,请考虑命名管道(NamedPipeServerStream)或套接字。如果它们很复杂,请考虑通过IPC通道或WCF进行远程处理。

就个人而言,我喜欢这种命名管道。只需确保管道名称以“Global \”作为前缀,以便从交互式桌面会话中看到它。如果担心安全性,请加密消息。在服务中启动后台线程,在线程流上进行阻塞调用以实现消息处理。

答案 4 :(得分:0)

如果Windows服务在同一台机器上,您可以停止并启动该服务吗?或者调用在另一台机器上停止/启动服务的Web服务?

如果您确实有一项服务可以轮询(或“嗅探”)要做的事情,这可能是对数据库的一个非常小的基本调用,以检查会触发实际工作的内容吗?