2009-11-26 11 views
12

Tengo dos aplicaciones C# y quiero que una de ellas envíe dos enteros a la otra (esto no tiene que ser rápido ya que se invoca solo una vez cada pocos segundos).¿Cuál es la forma más fácil de hacer comunicación entre procesos en C#?

¿Cuál es la forma más fácil de hacer esto? (No tiene que ser el más elegante).

+0

Cerca de duplicados: http://stackoverflow.com/questions/232332 y http://stackoverflow.com/questions/833376 –

Respuesta

0

Yo diría que hablen por un zócalo.

Tiene un programa listen en un zócalo y tiene el otro connect en el primero. Envíe los dos enteros en una sola línea, como cadenas de dígitos.

La única pregunta es cómo deben acordar los números de puerto y cómo saben que están hablando entre ellos. Pueden acordar los números de los puertos si decides que siempre deben usar el puerto 12345 (por ejemplo), y la solución sucia y sucia para la segunda parte es simplemente confiar en quien sea que estés hablando para ser un buen tipo.

+0

En realidad, por lo que recuerdo, puede especificar desde qué direcciones aceptar las conexiones (o en menos control de qué dirección viene, y si no es localhost ... bueno, nunca hables con extraños;)). – Bobby

0

Otra forma sería imitar una tubería con nombre. Declare un archivo en algún lugar y lea desde/escriba en él.

O, si los programas se ejecutan en secuencia, puede probar el portapapeles ... pero esa solución es fea y tiene errores (a veces .NET no puede acceder al portapapeles sin ningún motivo).

+1

Estoy totalmente en desacuerdo con la parte del portapapeles. Y no veo el punto de * imitar * una tubería con nombre, cuando simplemente puede usar tubos con nombre real? – Groo

0

Mutex puede ser una opción; lea esto: Inter-Process Data Exchange using .NET 2.0

Para completar, también puede usar net.pipe y WCF.

+0

Los mutexes se utilizan para la sincronización, no para la transferencia de datos. – Groo

+0

eliminado que Groo, ty –

15

La forma más fácil y más confiable es casi con seguridad IpcChannel (a.k.a canal de comunicación entre procesos); para eso está ahí. Puede ponerlo en funcionamiento con un par de líneas de código y configuración.

+1

Muy simple; fácil, etc ... De lejos, el más fácil de lo que estoy viendo. – DaBlue

5

Puede probar .NET Remoting. Aquí hay un ejemplo simple: CodeProject .NET Remoting.

Si está utilizando .NET 3.5, debe ir a WCF, ya que Remoting se está quedando obsoleto lentamente. De nuevo, hay muchos examples for WCF alrededor.

2

He creado mi propia biblioteca de código abierto para un IPC rápido y fácil que funciona entre servicios de Windows, aplicaciones de consola y formularios de Windows.

Tiene algunas ventajas sobre las implementaciones de IPC existentes y no requiere ninguna configuración.

Ver here.

Cuestiones relacionadas