2009-11-26 10 views
12

Ho due applicazioni C# e voglio che uno di loro invii due interi all'altra (questo non deve essere veloce dato che è invocato solo una volta ogni pochi secondi).Qual è il modo più semplice per eseguire la comunicazione tra processi in C#?

Qual è il modo più semplice per farlo? (Non deve essere il più elegante.)

+0

Vicino duplicati: http://stackoverflow.com/questions/232332 e http://stackoverflow.com/questions/833376 –

risposta

0

Direi di farli parlare con una presa.

Avere un programma listen su una presa e disporre l'altro connect al primo. Invia i due numeri interi su una singola riga, come stringhe di cifre.

L'unica domanda è come devono essere d'accordo sui numeri di porta e su come sanno che stanno parlando l'uno con l'altro. Possono essere d'accordo sui numeri di porta decidendo che dovrebbero usare sempre la porta 12345 (per esempio), e la soluzione di hacking per la seconda parte è semplicemente fidarsi di chiunque tu stia parlando per essere un bravo ragazzo.

+0

In realtà, per quanto mi ricordo, è possibile specificare da quali indirizzi accettare connessioni (o al meno controllo da quale indirizzo sta arrivando, e se non è localhost ... beh, non parlare mai con estranei;)). – Bobby

0

Un altro modo sarebbe imitare una pipe denominata. Dichiarare un file da qualche parte e leggere da/scrivere ad esso.

Oppure, se i programmi vengono eseguiti in sequenza, è possibile provare gli appunti ... ma quella soluzione è brutta e dannosa (a volte .NET non può accedere agli Appunti senza motivo).

+1

Sono fortemente in disaccordo con la parte degli appunti. E non vedo alcun punto in * imitando * una named pipe, quando puoi semplicemente usare pipe con nome effettivo? – Groo

0

Mutex può essere un'opzione; si prega di leggere questo: Inter-Process Data Exchange using .NET 2.0

Per completezza, si può anche usare net.pipe e WCF.

+0

I mutex vengono utilizzati per la sincronizzazione, non per il trasferimento dei dati. – Groo

+0

rimosso quel Groo, ty –

15

Il modo più semplice e affidabile è quasi certamente IpcChannel (a.k. Canale di comunicazione Inter Process); questo è quello che è lì per. Puoi farlo funzionare con un paio di linee di codice e configurazione.

+1

Molto semplice; facile, ecc ... Di gran lunga il più facile da quello che sto vedendo. – DaBlue

5

È possibile provare .NET Remoting. Ecco un semplice esempio: CodeProject .NET Remoting.

Se si utilizza .NET 3.5, si dovrebbe andare a WCF, poiché il servizio di Remoting sta lentamente diventando obsoleto. Ancora una volta, ci sono molti examples for WCF in giro.

2

Ho creato la mia libreria open source per IPC facile e veloce che funziona tra servizi Windows, applicazioni console e moduli Windows.

Presenta alcuni vantaggi rispetto alle implementazioni IPC esistenti e non richiede alcuna configurazione.

Vedere here.