C# 唤醒服务、与服务的通信

C# 唤醒服务、与服务的通信,c#,winforms,windows-services,C#,Winforms,Windows Services,不久前,我编写了一个带有计时器的服务,它每n分钟执行一次操作。一切都很好。但是现在,我想编写一个服务,它等待gui应用程序发出信号、消息或其他东西来完成他的工作 我希望我的进程能够有节奏地睡眠(而不是在一个无限循环中嗅探某些东西),直到我的winforms应用程序告诉他“嘿,做事,工作完成后给我打电话” 有人能给我一个凝视点吗 谢谢。如果windows服务在同一台计算机上,您可以停止并启动该服务吗?或者调用在另一台机器上停止/启动服务的Web服务 如果您确实有一个服务轮询(或“嗅探”)某项任务,

不久前,我编写了一个带有计时器的服务,它每n分钟执行一次操作。一切都很好。但是现在,我想编写一个服务,它等待gui应用程序发出信号、消息或其他东西来完成他的工作

我希望我的进程能够有节奏地睡眠(而不是在一个无限循环中嗅探某些东西),直到我的winforms应用程序告诉他“嘿,做事,工作完成后给我打电话”

有人能给我一个凝视点吗


谢谢。

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


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

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

您需要使用进程间通信(IPC)。对于C.*,这通常意味着.NETRelation——在.NET.< /P>的新版本上的.NET或Windows通信基础(WCF)的旧版本上。 本质上,客户机应用程序连接到由服务实现的接口,然后可以调用该接口上的方法,就好像它在同一进程中一样

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

起点:


自托管WCF服务

任何IPC机制都有资格完成此任务。如果您需要一个简单的消息传递,可以考虑命名管道(NAMEDPIPER VIESTFROW)或套接字。如果它们是精心制作的,请考虑在IPC通道或WCF上进行远程处理。
就我个人而言,我喜欢为此命名管道。只需确保管道名称的前缀为“Global\”,以便在交互式桌面会话中可见。如果存在安全问题,则对消息进行加密。在服务中启动后台线程,对管道流进行阻塞调用,以实现消息处理。

如果我停止并启动服务,我的程序如何知道工作何时完成以及是否发生错误?我想避免投票。当然,我可以这样做,然后将结果写在表格中,但我认为通过某种直接交流会更好、更优雅。类似于一方引发另一方捕获的事件。您可以启动服务。服务完成后可以自动停止吗?