.NET Remoting

Eintrag zuletzt aktualisiert am: 01.05.2014

.NET Remoting ein proprietäres Fernaufrufkonzept der Firma Microsoft im Rahmen des Microsoft .NET Framework, ver-gleichbar mit Remote Method Invocation (RMI) in Java. Anders als der Vorgänger Distributed Component Object Model (DCOM) ist .NET Remoting aber nicht auf ein bestimmtes Über-tragungsformat und -protokoll festgelegt und bietet eine Vielzahl von Aktivierungs- und Konfigurationsoptionen.

.NET Remoting wird von vielen Verfechtern der losen serviceorientierten Kopplung wegen seiner engen Kopplung kritisiert. In der in .NET 3.0 enthaltenen Kommunikationsinfrastruktur Indigo wird das .NET Re-moting-Modell nur noch in wenigen Teilen vertreten sein.
Anders als der Vorgänger DCOM ist .NET Remoting nicht auf ein bestimmtes Übertragungsformat und -protokoll festgelegt und bietet eine Vielzahl von Aktivierungs- und Konfigurationsoptionen.

Der Kern des .NET Remoting ist in der mscorlib.dll und der System.Runtime.Remoting.dll implementiert.

Enge Bindung

.NET Remoting unterscheidet zwischen der Objektübergabe By-Reference- oder By-Value. Außerdem wird unterschieden zwischen Objekt mit Server-Aktivierung (Server-Activated Objects – SAO, auch: Well Known Types) und Objekten mit Client-Aktivierung (Client-Activated Objects – CAO, auch: Activated Types).

Im CAO-Fall ist immer (sowohl im By-Value als auch By-Reference-Fall) eine Klasse zu verwenden – die Aktivierung ist über die Schnittstelle alleine nicht möglich. Der Objekttyp kann im SAO-Fall dem Client durch eine Klasse oder eine Schnittstelle bekannt gegeben werden. Die Nutzung einer Schnittstelle hat den Vorteil, dass der Client nur die Schnittstelle kennen muss, nicht die eigentliche Implementierung. SAO ist allerdings mit einem Call-by-Reference möglich.

Bei den server-aktivierten Objekten unterscheidet man ferner zwischen zwei Fällen:
  • Single Call: Bei jedem Methodenaufruf wird eine neue Objektinstanz erzeugt. Folglich müssen die Objekte zustandslos sein, da zwei nachfolgende Methodenaufrufe nicht das gleiche Objekt erreichen.
  • Singleton: In diesem Fall existiert nur eine Objektinstanz, bei der alle Client-Objekte ein und dasselbe Server-Objekt verwenden. Ein solches Objekt eignet sich z. B. zum Austausch von Daten zwischen Clients.

Bei der Client-Aktivierung erhält der Client die Kontrolle über Art und Anzahl der Server-Objekte. Hier wird bei jeder Instanziierung im Client ein zugehöriges Objekt auf dem Server erzeugt, d. h. die Anzahl der Objekte, die der Client sieht, entspricht der Anzahl der Objekte auf dem Server.

Protokolle und Formate

Anders als der Vorgänger DCOM ist .NET Remoting nicht auf ein bestimmtes Übertragungsformat und -protokoll festgelegt und bietet eine Vielzahl von Aktivierungs- und Konfigurationsoptionen.

Zur Übertragung des Fernaufrufs verwendet .NET Remoting Formatter und Channels:
  • Ein Formatter ist ein Mechanismus, der ein Objekt in einen Byte-Strom umzuwandelt bzw. zurückwandelt. Man spricht in diesem Zusammenhang von Serialisierung bzw. Deserialisierung. .NET 2.0 enthält einen binären und einen SOAP-Formatter.
  • Ein Channel bietet ein Transportmedium für serialisierte Objekte an. .NET 2.0 enthält TCP, HTTP, IPC (Inter-Prozess-Kommunikation) sowie einen Application-Domain-internen Channel.

Unterschiede zu den Webservices

Hinsichtlich der Performanz ist .NET Remoting über TCP mit dem binären Formatter wesentlich performanter als über HTTP/SOAP. Auch HTTP/binär ist schneller als HTTP/SOAP. Remoting über HTTP/SOAP ist ähnlich performant wie XML-Webservices. Keines der vorgenannten Verfahren ist jedoch so schnell wie DCOM.

Unterschiede zu den Webservices

.NET Remoting mit dem SOAP-Formatter über HTTP ist nicht gleichzusetzen mit XML-Webservices, auch wenn dort ebenfalls SOAP und HTTP zum Einsatz kommen. .NET Remoting mit SOAP/HTTP ist nur unter bestimmten Voraussetzungen kompatibel mit XML-Webservices (siehe [MSDN12]). .NET Remoting nutzt das so genannte »RPC-codierte« SOAP, das nicht Teil des Basic Profile der Web Services Interoperability Organization (WS-I) ist. Die Bereitstellung von XML-Webservices via .NET Remoting beschränkt daher die Interoperabilität zu anderen Plattformen und die daher nicht zu empfehlen.

Hosting

Damit ein Objekt für Remoting-Clients überhaupt erreichbar ist (also die Funktionalitäten zur Verfügung stellt, die das Objekt zum Server macht), muss der Server in einem Host-Prozess angeboten werden. Unter COM hat die Laufzeitumgebung selbst einen universellen Host angeboten – das .NET Framework stellt einen solchen Host-Prozess nicht zur Verfügung. Unter .NET existieren für das Hosting folgende Optionen:

Weitere Möglichkeiten

  • Deklarative Remoting-Konfiguration: Neben der Konfiguration von Client und Server durch Programmcode ist alternativ auch eine Konfiguration innerhalb einer XML-Anwendungskonfigurationsdatei möglich. Die deklarative und die programmatische Konfiguration können parallel angewendet werden, d. h. eine Anwendung kann auch noch weitere Ports im Programmcode deklarieren, obwohl bereits eine Konfigurationsdatei eingelesen wurde.
  • Lebensdauer: In DCOM verwendet ein Server die Referenzzählung seiner Clients und ein Client einen periodischen Ping, um die fortwährende Existenz des Servers zu prüfen. .NET Remoting vermeidet den Netzwerk-Overhead durch einen Lebensdauer-Mechanismus mit Leihdauer (Lease). Jedes Objekt ist mit einer Time-to-Live (TTL) versehen, die heruntergezählt wird. Die Standard¬lebensdauer beträgt fünf Minuten. Ein Server-Objekt kann die Dauer aber auf andere Werte setzen (auch auf »unendlich«). Die Lebensdauer eines Objekts kann durch einen erneuten Methodenaufruf oder durch so genannte Sponsoren verlängert werden.
  • Austausch generischer Datentypen: Ab .NET 2.0 unterstützt .NET Remoting auch generische Datentyoen
  • Authentifizierung und Verschlüsselung: Ab .NET 2.0 wird in TCP- und IPC-Channel Authentifizierung und Verschlüsselung untersützt. In .NET 1.x gab es keinerlei Sicherheitsfunktionen.
  • Zugriffsrechtelisten: Der in .NET 2.0 neu eingeführte IPC-Channel unterstützt auch Zugriffsrechtelisten (ACLs).

[MSDN12]
ASP.NET Web Services oder .NET Remoting - So treffen Sie die richtige Entscheidung
http://www.microsoft.com/germany/msdn/library/net/ASPNETWebServicesOderNETRemotingSoTreffenSieDieRichtigeEntscheidung.mspx