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?


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


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


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.


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.


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.



1

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.