Sollte ich Named Pipes oder .NET Remoting verwenden, um mit einem laufenden Prozess auf meinem Computer zu kommunizieren?
Sollte ich Named Pipes oder .NET Remoting verwenden, um mit einem laufenden Prozess auf meinem Computer zu kommunizieren?
Antworten:
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.
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 .
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.
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.
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.
.Net Remoting ist kein Protokoll für sich. Hier können Sie auswählen, welches Protokoll verwendet werden soll: SOAP, Named-Pipes usw.
.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