¿Debo usar Named Pipes o .NET Remoting para comunicarme con un proceso en ejecución en mi máquina?
¿Debo usar Named Pipes o .NET Remoting para comunicarme con un proceso en ejecución en mi máquina?
Respuestas:
WCF es la mejor opción. Es compatible con un número de diferentes mecanismos de transporte ( incluyendo Named Pipes ) y puede ser completamente configuración accionados. 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:
WCF y .NET Remoting son realmente comparables en rendimiento. Las diferencias son tan pequeñas (midiendo la latencia del cliente) que no importa cuál sea un poco más rápido. Sin embargo, WCF tiene un rendimiento de servidor mucho mejor que .NET Remoting. Si comenzara un proyecto completamente nuevo, elegiría WCF. De todos modos, WCF hace mucho más que Remoting y por todas esas características me encanta.
Si está en una sola máquina, Named Pipes le ofrece un mejor rendimiento y se puede implementar con la infraestructura remota y con WCF. O simplemente puede usar System.IO.Pipes directamente .
Si te refieres a la comunicación entre procesos, utilicé .NET Remoting sin ningún problema hasta ahora. 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. La comunicación remota le permite invocar métodos remotos con facilidad.
Si está utilizando .NET Framework 3.0 o superior, usaría WCF. Al usar WCF, puede usar diferentes enlaces dependiendo 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á utilizar el enlace WS-HTTP. Para su caso, puede usar WCF con un enlace net-tcp o un enlace de canalización con nombre. Cualquiera 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 mensajes, no en objetos (estoy haciendo una generalización aquí basada en los modelos de programació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 es clara. Cuando todo lo que está haciendo es enviar un mensaje como si estuviera con WCF, se vuelve más fácil separar sus preocupaciones entre la comunicación y las clases / infraestructura de las que se compone un solo nodo.
WCF también proporciona flexibilidad. Con solo cambiar alguna configuración (enlace), puede tener el mismo servicio en otra máquina en lugar de IPC en la misma máquina. Por lo tanto, su código permanece flexible.
.Net remoting no es un protocolo en sí mismo. Le permite elegir qué protocolo usar: SOAP, canalizaciones con nombre, etc.
.net remoting está integrado en .net para realizar la comunicación interna del proceso. Si lo usa, continuarán admitiendo y posiblemente mejorando en versiones futuras. Las canalizaciones con nombre no le prometen mejoras en futuras versiones de .net