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.
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 .
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 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
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/…
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:
MSDN-Bereich für WCF
quelle
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 .
quelle
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.
quelle
Remoting in .NET Framework 2.0 bietet den IPC-Kanal für die prozessübergreifende Kommunikation auf demselben Computer.
quelle
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.
quelle
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.
quelle
.Net Remoting ist kein Protokoll für sich. Hier können Sie auswählen, welches Protokoll verwendet werden soll: SOAP, Named-Pipes usw.
quelle
.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
quelle