前段时间我用定时器写了一个服务,每隔n分钟做一次动作。一切都是对的。但现在,我想编写一个服务,等待来自gui应用程序的信号,消息或其他东西来完成他的工作。
我希望我的进程能够节奏地睡觉(不是在无限循环中嗅闻),直到我的winforms应用程序告诉他“嘿,做事情并在工作完成时给我一个响铃”
有人可以给我一点注意力吗?感谢。
答案 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服务?
如果您确实有一项服务可以轮询(或“嗅探”)要做的事情,这可能是对数据库的一个非常小的基本调用,以检查会触发实际工作的内容吗?