Mecanismos de IPC en C # – Uso y mejores prácticas

He usado IPC en el código de win32 hace un tiempo. [Secciones críticas, eventos y semáforos]

¿Cómo es la escena en el entorno .NET? ¿Hay algún tutorial que explique todas las opciones disponibles y cuándo usarlo y por qué?

Lo más reciente de Microsoft en IPC es Windows Communication Foundation . En realidad, no hay nada nuevo en el nivel inferior (tcp, upd, named pipes, etc.). WCF simplifica enormemente el desarrollo de IPC.

Recurso útil:

  • Comunicación entre procesos con WCF en el portal del Dr. Dobb
  • Opciones de comunicación de WCF en .NET Framework 3.5

y por supuesto MSDN en WCF

Tiendo a usar named pipes o sockets de Unix (dependiendo de si estoy apuntando a MS.NET o Mono – tengo una clase que lo abstrae) ya que es fácil de usar, portátil y me permite interactuar fácilmente con código no administrado . Dicho esto, si solo está tratando con el código administrado, vaya con WCF o de manera remota, este último si necesita soporte Mono, ya que su soporte WCF simplemente no está allí todavía.

Aparte de lo obvio (WCF), hay un enlace ZeroMQ para C # / CLR, que es bastante bueno:

http://www.zeromq.org/bindings:clr

Tiene IPC orientado a mensajes, pub / sub y varias otras estrategias con mucho menos código y configuración que WCF.

También es al menos un orden de magnitud más rápido que cualquier otra cosa y tiene menos latencia si requiere comunicaciones de baja latencia.

Con respecto a semáforos, lockings, mutexes, etc. Si compartes comunicándote en lugar de comunicarte compartiendo, tendrás una carga completa menos complicada que el paradigma tradicional.

Recomendaría usar archivos mapeados de memoria si necesita usar en el dominio de la máquina, no comunicación a través de la red. Vea el siguiente enlace.

http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html

También hay .NET Remoting, que encontré bastante genial, pero supongo que están obsoletos ahora que tienen WCF.

Parece que le interesan las técnicas de sincronización en lugar de la comunicación. Si es así, le gustaría comenzar aquí , o quizás esta descripción más concisa .