【问题标题】:wake up a service, communication with services唤醒一个服务,与服务通信
【发布时间】:2009-11-21 12:04:21
【问题描述】:

前段时间,我编写了一个带有计时器的服务,该计时器每 n 分钟执行一次操作。一切正常。但是现在,我想编写一个服务来等待来自 gui 应用程序的信号、消息或其他东西来完成他的工作。

我希望我的进程完全进入睡眠状态(而不是在无限循环中嗅探某些东西),直到我的 winforms 应用程序告诉他“嘿,做事并在工作完成后给我一个铃声”

谁能给我注视点?

谢谢。

【问题讨论】:

    标签: c# winforms windows-services


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        起点:

        自托管 WCF 服务

        【讨论】:

          【解决方案4】:

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

          就我个人而言,我喜欢命名管道。只需确保管道名称以“Global\”为前缀,以便在交互式桌面会话中可见。如果安全是一个问题,请加密消息。在您的服务中启动一个后台线程,该线程在管道流上进行阻塞调用以实现消息处理。

          【讨论】:

            【解决方案5】:

            如果windows服务在同一台机器上,你可以停止和启动服务吗?或调用停止/启动另一台机器上的服务的网络服务?

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

            【讨论】:

            • 如果我停止并启动服务,我的程序如何知道工作何时完成以及是否发生错误?我想避免民意调查。当然,我可以这样做,然后将结果写在表格中,但我认为某种直接沟通会更好,更优雅。类似于一方提出并被另一方捕获的事件。
            • 你可以直接启动服务。然后服务可以在完成后自行停止?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多