在 Windows 服务和表单应用程序之间发送和接收消息的最佳方式

Posted

技术标签:

【中文标题】在 Windows 服务和表单应用程序之间发送和接收消息的最佳方式【英文标题】:Best way to send and receive messages between a Windows service and form application 【发布时间】:2013-08-19 02:33:04 【问题描述】:

我正在尝试实现 IPC,但我所做的与我看到的文档有些不同。

我需要使用服务和表单应用程序异步发送、接收和响应。

//Service1.cs
serverPipe = new NamedPipeServerStream(@"testpipe", PipeDirection.InOut, 
   1, PipeTransmissionMode.Message, PipeOptions.Asynchronous);

//LoginForm.cs
clientPipe = new NamedPipeClientStream(@".", @"testpipe", PipeDirection.InOut
    PipeOptions.Asynchronous);

我相信这对双方都有好处。

从一个写到另一个:

//In Service1.cs and Login.cs
private void pipeWriter()

    StreamWriter write = null;
    write = new StreamWriter(clientPipe);

    if (clientPipe.IsConnected)
    
        write.Write(clientPipe);
        write.Flush();
    

...然后阅读:

//In Service1.cs and Login.cs
private void pipeReader()

    try
    
        while (true)
        
            using (StreamReader sr = new StreamReader(clientPipe))
            
                string message;

                while ((message = sr.ReadLine()) != null)
                
                    //read and respond to messages written to stream
                
            
        
    
    catch (Exception ex)
    

    

我是正确的吗?是否有另一种(更好的)方式在 Windows 服务和表单应用程序之间进行通信?

【问题讨论】:

【参考方案1】:

既然你在 .NET 中,我想你应该看看 WCF - Windows Communication Foundation,你定义合同(服务合同,数据合同),发布服务并使用服务而不用担心协议,因为你可以选择它通过配置服务器和客户端应用程序。

您可以查看这些链接以获取一些信息:

http://www.codeproject.com/Articles/29243/A-Windows-Communication-Foundation-WCF-Overview http://msdn.microsoft.com/en-us/library/ee958158.aspx

希望对你有帮助, 干杯

【讨论】:

WCF 是否需要网络连接来传输数据 b/w win 服务和 win 表单。为什么我要问意味着我将只在同一台机器上安装两者。

以上是关于在 Windows 服务和表单应用程序之间发送和接收消息的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

直到 socket.Close 才收到 Windows socket.Send 数据

桌面应用程序和 Windows 服务之间通信的最佳方式

可靠服务之间的通信

发送方和接收方的 google-cast-sdk 音频和字幕手动处理

Apache Kafka教程:入门介绍

如何获得 ActiveMQ - 单个发送方和接收方的 FIFO 要求?