唤醒服务,与服务通信
问题描述:
前段时间,我用一个定时器写了一个服务,每隔n分钟做一个动作。一切正常。但是现在,我想写一个服务,等待gui应用程序中的信号,消息或其他东西来完成他的工作。唤醒服务,与服务通信
我想我进程睡眠pacefull(不是在一个无限循环嗅东西),直到我的WinForms应用程序告诉他:“嘿,做的事情,给我打电话,当工作完成”
能有人给我凝视点?
谢谢。
答
如果windows服务在同一台机器上,您可以停止并启动服务?或者调用一个web服务来停止/启动另一台机器上的服务?
如果您确实有某项服务需要轮询(或“嗅探”)某项工作,这可能是对数据库的一个非常小且基本的调用,以检查是否会触发实际工作?
答
您需要使用进程间通信(IPC)。对于C#而言,这通常意味着.NET更新版本的.NET远程处理(在较早版本的.NET上)或Windows Communication Foundation(WCF)。
本质上,客户端应用程序连接到服务实现的接口,然后可以调用它的方法,就好像它在同一个进程中一样。
如果这太复杂了,可以使用服务等待的命名事件对象以及客户端设置。
答
起点:
自托管WCF服务
答
的IPC机制的任何资格来完成这件事。如果您需要简单的消息传递,请考虑使用命名管道(NamedPipeServerStream)或套接字。如果它们详细说明,请考虑通过IPC通道或WCF远程处理。
就我个人而言,我喜欢这个命名管道。只要确保管道名称的前缀是“Global \”,以便在交互式桌面会话中可见。如果安全是一个问题,请加密消息。在服务中启动后台线程,在管道流上进行阻塞调用以实现消息处理。
如果我停止并启动服务,我的程序如何知道工作何时完成以及是否发生错误? 我想避免民意调查。当然,我可以这样做,然后把结果写在一张桌子上,但我认为这会更好,更优雅地进行某种直接交流。类似于一方提出并被另一方捉住的事件。 – Jonathan 2009-11-21 12:19:11
您可以启动服务的开始。服务可以在完成后自行停止? – 2009-11-21 12:45:23