与正在运行的服务进行通信

时间:2016-01-30 17:45:58

标签: c# windows

我有一个在服务器上作为服务运行的程序。它以这种方式设置,因此服务器的控制台无需登录即可运行程序。

我想创建第二个winform程序,该程序将与服务程序通信,并显示GUI在服务程序有gui时通常会显示的任何状态信息。

我如何在这两个节目之间进行交谈?他们都在C#中,都在我的控制之下。

我甚至不确定该怎么称呼它,所以很可能以前已经回答了。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用Microsoft消息队列(https://support.microsoft.com/en-us/kb/815811)等内容。

您的服务会将消息发布到WinForms应用程序已知的队列中。然后,您只需要从该队列中读取并根据需要处理消息。

在控制两个应用程序时,您可以创建自己的消息类型,并通过MSMQ对该对象进行序列化/反序列化。

答案 1 :(得分:0)

您的服务可以覆盖ServiceBase的{​​{3}},以便接收命令。

然后,您可以通过OnCustomCommand(int)

让其他应用与您的服务互动

OnCustomCommand()方法中,您必须if-else测试输入是int,或使用switch语句。

e.g。

    protected override void OnCustomCommand(int command)
    {
        switch(command) 
        {
            case 128:
                 Refresh();
                 break;
            case 129:
                 WriteLog();
                 break;
      // etc
         }
    }

如果您想进行双向通信,则可能需要为服务实施响应方式。这可以是消息队列,写入某些数据库表,文件,Web服务或其他内容。