不同的基于C#的服务之间的通信

有两种不同的服务之间的沟通方式吗? 我有一个已经运行的服务。 有没有办法创build第二个服务,可以附加到第一个服务,并发送和接收date?

我也想从控制台应用程序访问Windows服务并附加到它。 可能吗?

首先,我会玩弄tcpclient和tcpserver

http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx

即使您需要发送的数据比日期更复杂,也可以轻松进行序列化/反序列化。

发送和接收日期这接近最简单的选项。

如果服务在不同的机器上运行,而共享内存和命名管道则不工作。

示例代码

// Create a thread running this code in your onstarted method of the service using System.IO; using System.Net; using System.Net.Sockets; var server = new Tcplistner(IPAddress.Parse("127.0.0.1"), 8889); server.Start(); while(true) { var client = server.AcceptTcpClient(); using(var sr = new StreamReader(client.GetStream())) { var date = DateTime.Parse(sr.ReadToEnd()); Console.WriteLine(date); } } // In the console using System.IO; using System.Net; using System.Net.Sockets; var client = new TcpClient("localhost",8889); using(var sw = new StreamWriter(client.GetStream())) { sw.Write(System.DateTime.Now); } 

您可以尝试使用以下方法实现此目的:

  • IPC(通过命名管道进行的进程间通信)
  • 共享内存( 内存映射文件 )
  • 套接字(TCP / IP)

使用WCF和NetNamedPipeBindin的多对一本地IPC的示例。

其他例子: AC#进程间同步和通信的框架 。

一切都取决于你使用的.NET Framework的版本。 如果您使用.NET 3.0及以上,那么你可以看看WCF 。 如果不是那么你是你自己的,你可以谷歌关键字P / Invoke (CreateFileMapping,MapViewOfFile,CreatePipe …)。