4

有没有办法在两个不同的服务之间进行通信?我有一个已经运行的服务。有没有办法创建可以附加到第一个服务并向其发送和接收日期的第二个服务?

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

4

2 回答 2

7

您可以尝试使用以下方法来实现:

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

其他示例:用于进程间同步和通信的 AC# 框架

一切都取决于您使用的 .NET Framework 版本。如果您使用 .NET 3.0 及更高版本,则可以查看WCF。如果没有,那么您就靠自己了,您可以搜索关键字P/Invoke(CreateFileMapping、MapViewOfFile、CreatePipe ...)。

于 2011-03-30T13:26:45.247 回答
3

首先我会玩 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 TcpListener(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);
}
于 2011-03-30T13:40:34.747 回答