PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [.NET] Kommunikation zwischen 2 C#-Programmen


holsten
2009-08-26, 18:36:00
Hallo!

Ich würde gerne zwischen 2 in C# geschriebenen Programmen einen simplen Datenaustausch machen.

Eckpunkte:

- Pro "Sendung" wird ein Integer und ein dazugehörender String der Länge 60 Zeichen verschickt
- Im Extremfall können zum selben Zeitpunkt (oder zumindest innerhalb der selben Sekunde) 10-15 Sendungen verschickt werden wollen.

Das ist eigentlich schon alles. Es wäre noch zu sagen, dass beide Programme auf ein und dem selben Rechner parallel laufen, also nix mit verschiedenen Maschinen.

Wie würdet ihr vorgehen? Ich suche ein Kompromiss zwischen "modern/state-of-the-art" und einfacher Implementierung.
Dieses WCF scheint mächtig zu sein, aber dadurch dass man alle Technologien darin zusammengefasst hat ist es als Laie fast nicht möglich, da noch durchzublicken.

Das wars fürs erste, Danke!

AtTheDriveIn
2009-08-26, 20:24:17
http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp

oder

http://articles.techrepublic.com.com/5100-10878_11-6170794.html

Es gibt einige Ansätze wie du das realisieren kannst. Suche einfach nach Inter-Process-Communication

Gast
2009-08-26, 20:40:11
Oder du nimmst .NET Remoting mit dem IPC Channel (der umgeht den Netzwerk Stack):

http://www.codeguru.com/csharp/csharp/cs_syntax/remoting/article.php/c9251

Mit .NET Remoting geht es recht schnell zu implementieren, WCF wäre natürlich noch besser.

SentinelBorg
2009-08-27, 10:46:41
WCF ist nicht so komplex, denn du musst ja nicht alles nutzen. In den kleinen Beispielen im MSDN für WCF steht ansich der komplette Code den du brauchst bereits da.

Wenn ich mich richtig entsinne, brauchst du einen Message-Contract, bei dir dann mit einem Int32 und einem String drin, der in beiden Assemblies referenziert wird. Dann musst du jeweils beim Programmstart einen Listener instanzieren und öffnen, sowie zum Verschicken der Nachricht dann bei Bedarf einen Sender. In der App-Config kannst du dann NamedPipes als Kommunikations-Methode einstellen. Falls du dann eventuell später mal die Applikationen doch noch auf zwei verschiedenen Rechnern verwenden möchstest, musst du dann nur in der AppConfig auf TCP/IP umstellen, den Rest machts WCF.

robobimbo
2009-08-31, 14:20:46
Also ich würd auch remoting mit dem IPC Channel verwenden

Gast
2009-09-10, 21:03:39
Ich löse solche Dinge immer per TCP/IP. Das ganze mache ich dann so parametrisierbar, dass es auch auf 2 Rechnern laufen kann. Dann kann man sich von außen sehr schön mit Wireshark rein hängen und mitlesen, ohne dass man den Code angreifen muss. Wenn das auf 2 verschiedenen Rechnern läuft, dann sollte man aber unbedingt TcpClient.NoDelay auf True setzen, sonst hat man eine Latenz von 200-300ms im LAN.
Der einzige Nachteil ist, dass man schauen muss, dass man keine Portnummern doppelt erwischt oder bestehende Anwendungen blockiert.