Comunicación entre diferentes servicios basados ​​en C #.

¿Hay una manera de comunicarse entre dos servicios diferentes? Tengo un servicio que ya funciona. ¿Hay alguna manera de crear un segundo servicio que se pueda adjuntar al primer servicio y enviarle y recibir fechas?

También me gustaría acceder al servicio de Windows desde una aplicación de consola y adjuntarlo. ¿Es posible?

Para empezar, jugaría con tcpclient y 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

Incluso si los datos que necesita enviar son más complejos que una fecha, se pueden serializar / deserializar fácilmente.

Para las fechas de envío y recepción esta es la opción más sencilla.

Los calcetines también funcionan si los servicios se ejecutan en diferentes máquinas, mientras que la memoria compartida y las tuberías con nombre no lo hacen.

código de ejemplo

// 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); } 

Puedes intentar implementar esto usando:

  • IPC (comunicación entre procesos a través de tuberías con nombre )
  • Memoria compartida ( archivos mapeados en memoria )
  • Socket (TCP / IP)

Ejemplo de uso de WCF: Many to One IPC local usando WCF y NetNamedPipeBindin .

Otro ejemplo: AC # Framework para la Sincronización y Comunicación entre Procesos .

Todo depende de la versión de .NET Framework que uses. Si utiliza .NET 3.0 y superior, puede echar un vistazo a WCF . Si no, entonces está solo y puede buscar en las palabras clave P / Invoke (CreateFileMapping, MapViewOfFile, CreatePipe …).