¿Cuál es la mejor opción para la comunicación entre procesos de .NET?

¿Debería usar Named Pipes o .NET Remoting para comunicarme con un proceso en ejecución en mi máquina?

WCF es la mejor opción. Es compatible con varios mecanismos de transporte diferentes ( incluidas las tuberías con nombre ) y puede ser completamente impulsado por la configuración. Recomiendo encarecidamente que eche un vistazo a WCF.

Aquí hay un blog que hace una comparación de rendimiento WCF vs Remoting .

Una cita del blog:

El WCF y .NET Remoting son realmente comparables en rendimiento. Las diferencias son tan pequeñas (medir la latencia del cliente) que no importa cuál es un poco más rápido. WCF tiene un rendimiento del servidor mucho mejor que .NET Remoting. Si comenzara un proyecto completamente nuevo, elegiría el WCF. De todos modos, WCF hace mucho más que Remoting y por todas esas características me encanta.

Sección de MSDN para WCF

Si está en una sola máquina, Named Pipes le ofrece un mejor rendimiento y se puede implementar con la infraestructura remota y WCF. O simplemente puede usar directamente System.IO.Pipes .

Si se refiere a la comunicación entre procesos, usé .NET Remoting sin ningún problema hasta el momento. Si los dos procesos están en la misma máquina, la comunicación es bastante rápida.

Las tuberías con nombre son definitivamente más eficientes, pero requieren el diseño de al menos un protocolo de aplicación básico, lo que podría no ser factible. Remoting le permite invocar métodos remotos con facilidad.

Remoting en .NET Framework 2.0 proporciona el canal IPC para la comunicación entre procesos dentro de la misma máquina.

Si está usando .NET Framework 3.0 o superior, usaría WCF. Usando WCF, puede usar diferentes enlaces que dependen de la compensación entre rendimiento / interoperabilidad / etc. Que tu necesitas.

Si el rendimiento no es crítico y necesita interoperabilidad con otras tecnologías de servicios web, querrá usar el enlace WS-HTTP. Para su caso, puede usar WCF con un enlace net-tcp o un enlace named-pipe. Cualquiera de los dos debería funcionar

Mi opinión personal es que el enfoque de WCF es más limpio, ya que puede hacer servicios basados ​​en contratos y centrarse en los mensajes, no en los objetos (aquí estoy haciendo una generalización basada en los modelos de progtwigción predeterminados de WCF / .NET Remoting). No me gusta enviar objetos a través del cable porque se pierde mucha información semántica o no está clara. Cuando todo lo que hace es enviar un mensaje como el que tiene con WCF, es más fácil separar sus preocupaciones entre la comunicación y las clases / infraestructura de las que está compuesto un solo nodo.

.Net remoto no es un protocolo en sí mismo. Le permite elegir qué protocolo usar: SOAP, named-pipes, etc.

WCF también proporciona flexibilidad. Con solo cambiar algunas configuraciones (vinculantes) puede tener el mismo servicio en alguna otra máquina en lugar de IPC en la misma máquina. Por lo tanto, tu código sigue siendo flexible.

.net remoting está integrado en .net para hacer la comunicación del proceso interno. Si usa eso, continuarán soportándolo y posiblemente mejorando en futuras versiones. Canalizaciones con nombre no le dan la promesa de mejoras en futuras versiones de .net