Was ist die beste Wahl für die prozessübergreifende .NET-Kommunikation? [geschlossen]

82

Sollte ich Named Pipes oder .NET Remoting verwenden, um mit einem laufenden Prozess auf meinem Computer zu kommunizieren?

mrbradleyt
quelle
1
Wow, ich habe im Grunde genau die gleiche Frage gestellt ... stackoverflow.com/questions/84860/…
Kris Erickson

Antworten:

58

WCF ist die beste Wahl. Es unterstützt eine Reihe verschiedener Transportmechanismen ( einschließlich Named Pipes ) und kann vollständig konfigurationsgesteuert sein. Ich würde Ihnen wärmstens empfehlen, sich WCF anzuschauen.

Hier ist ein Blog, das einen Leistungsvergleich zwischen WCF und Remoting durchführt .

Ein Zitat aus dem Blog:

Die Leistung von WCF und .NET Remoting ist wirklich vergleichbar. Die Unterschiede sind so gering (Messung der Client-Latenz), dass es keine Rolle spielt, welche etwas schneller ist. WCF hat jedoch einen viel besseren Serverdurchsatz als .NET Remoting. Wenn ich ein komplett neues Projekt starten würde, würde ich die WCF wählen. Auf jeden Fall kann die WCF viel mehr als nur Remoting und für all diese Funktionen liebe ich es.

MSDN-Bereich für WCF

Eric Schoonover
quelle
1
Weitere Beweise für Remoting. Von jemandem aus dem Microsoft Remoting / WCF-Team: "Es werden nur sehr geringe Entwicklungsinvestitionen in Remoting getätigt. WCF ist der Nachfolger von Remoting." Von hier stackoverflow.com/questions/1294494/…
MarkJ
15

Wenn es sich auf einem einzelnen Computer befindet, bietet Named Pipes eine bessere Leistung und kann sowohl mit der Remoting-Infrastruktur als auch mit WCF implementiert werden . Oder Sie können System.IO.Pipes direkt verwenden .

Mark Cidade
quelle
5

Wenn Sie die Kommunikation zwischen Prozessen meinen, habe ich .NET Remoting bisher problemlos verwendet. Wenn sich die beiden Prozesse auf demselben Computer befinden, ist die Kommunikation recht schnell.

Named Pipes sind definitiv effizienter, erfordern jedoch den Entwurf mindestens eines grundlegenden Anwendungsprotokolls, was möglicherweise nicht möglich ist. Mit Remoting können Sie problemlos Remote-Methoden aufrufen.

Dario Solera
quelle
3
WCF über Named Pipes erlaubt dies ebenfalls. In beiden Prozessen können Sie nur dieselbe Vertragsassemblierung verwenden.
Kent Boogaart
3

Remoting in .NET Framework 2.0 bietet den IPC-Kanal für die prozessübergreifende Kommunikation auf demselben Computer.

Icelava
quelle
3

Wenn Sie .NET Framework 3.0 oder höher verwenden, würde ich WCF verwenden. Mit WCF können Sie verschiedene Bindungen verwenden, abhängig vom Kompromiss zwischen Leistung / Interop / etc. das brauchst du.

Wenn die Leistung nicht kritisch ist und Sie eine Interaktion mit anderen Webdiensttechnologien benötigen, sollten Sie die WS-HTTP-Bindung verwenden. In Ihrem Fall können Sie WCF entweder mit einer Net-TCP-Bindung oder einer Named-Pipe-Bindung verwenden. Beides sollte funktionieren.

Mein persönlicher Standpunkt ist, dass der WCF-Ansatz sauberer ist, da Sie vertragsgesteuerte Dienste ausführen und sich auf Nachrichten konzentrieren können, nicht auf Objekte (ich mache hier eine Verallgemeinerung basierend auf den Standardprogrammiermodellen von WCF / .NET Remoting). Ich mag es nicht, Objekte über das Kabel zu senden, weil viele semantische Informationen verloren gehen oder nicht klar sind. Wenn Sie lediglich eine Nachricht senden, wie Sie es bei WCF tun, wird es einfacher, Ihre Bedenken zwischen der Kommunikation und den Klassen / Infrastrukturen, aus denen ein einzelner Knoten besteht, zu trennen.

Jason Olson
quelle
2

WCF bietet auch Flexibilität. Durch einfaches Ändern einer Konfiguration (Bindung) können Sie denselben Dienst auf einem anderen Computer anstelle von IPC auf demselben Computer ausführen. Daher bleibt Ihr Code flexibel.

Vikram I Code
quelle
Eine Liste der IPC-APIs für .NET: weblogs.asp.net/ricardoperes/…
Ricardo Peres
1

.Net Remoting ist kein Protokoll für sich. Hier können Sie auswählen, welches Protokoll verwendet werden soll: SOAP, Named-Pipes usw.

Joel Coehoorn
quelle
0

.net-Remoting ist in .net integriert, um die interne Prozesskommunikation durchzuführen. Wenn Sie das verwenden, werden sie es in zukünftigen Versionen weiterhin unterstützen und möglicherweise verbessern. Named Pipes versprechen Ihnen keine Verbesserungen in zukünftigen Versionen von .net

kemiller2002
quelle
2
Es ist unwahrscheinlich, dass sie das Remoting verbessern. Von jemandem aus dem Remoting / WCF-Team: "Es werden nur sehr geringe Entwicklungsinvestitionen in Remoting getätigt. WCF ist der Nachfolger von Remoting." Von hier aus stackoverflow.com/questions/1294494/…
MarkJ