Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 7.1.6.NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von.

Ähnliche Präsentationen


Präsentation zum Thema: "1 7.1.6.NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von."—  Präsentation transkript:

1 NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von Programmen in unterschiedlichen Sprachen C# („Csharp“, „Cis“) :Referenzsprache für.NET, Microsoft‘s Antwort auf Java.NET Remoting :Fernaufrufe auf der.NET-Plattform

2 vs Grundzüge der Fernaufruf-Programmierung in C# Klasse eines fernaufrufbaren Objekts muss erben von System.MarshalByRefObject z.B. using System; using System.Runtime.Remoting; class Server : MarshalByRefObject {private string memo = ""; public string echo(string s) { return memo += s; }

3 vs Objekterzeugung und –bekanntmachung in 3 Varianten:  Bekanntmachung eines öffentlichen Objekts: Objekt wird lokal erzeugt und dann „veröffentlicht“  Fernerzeugung eines öffentlichen Objekts (SAO): Erzeugung wird lokal vorbereitet, aber erst dann durchgeführt, wenn der erste Klient Interesse zeigt  Fernerzeugung eines privaten Objekts (CAO): Objekt wird auf anderem Rechner erzeugt, und der Erzeuger erhält einen Fernverweis darauf

4 vs  Bekanntmachung eines öffentlichen Objekts mit Operation der Klasse System.Runtime.Remoting.RemotingServices : using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; TcpChannel channel = new TcpServerChannel(4711); ChannelServices.RegisterChannel(channel); Server server = new Server(); RemotingServices.Marshal(server, "Service"); bewirkt Registrierung bei eingebautem Namensdienst !

5 vs Nachdem dies auf dem Rechner obelix ausgeführt wurde, erhalten Klienten einen Fernverweis/Vertreterobjekt wie folgt: using System.Runtime.Remoting.Activation; Server s = (Server)Activator.GetObject( typeof(Server), "tcp://obelix:4711/Service"); Verweis auf Vertreter eines anonymen Typs, verträglich mit Server

6 vs Beachte:  Keine explizite Stub-Erzeugung  Stub Generator ist unsichtbar, erzeugt Stub Code bei Bedarf aus den Metadaten (Schnittstellenbeschreibungen u.a.) der beteiligten Klassen und Schnittstellen.  Explizite Definition einer Schnittstelle für fernaufrufbare Objekte ist üblich, aber nicht obligatorisch.

7 vs  Fernerzeugung eines öffentlichen Objekts (SAO): Erzeugung wird lokal vorbereitet, aber erst dann durchgeführt, wenn der erste Klient Interesse zeigt ChannelServices.RegisterChannel( new TcpServerChannel(4711)); RemotingConfiguration. RegisterWellKnownServiceType( typeof(Server), „Service", WellKnownObjectMode.Singleton); d.h. ein Objekt mit Zustand (im Gegensatz zu SingleCall )

8 vs Klient arbeitet wie bei  : Server s = (Server)Activator.GetObject( typeof(Server), "tcp://obelix:4711/Service"); Achtung: Hier taucht weder beim Klienten noch beim Anbieter ein new auf. Das Objekt wird mit einem argumentlosen Konstruktor erzeugt. Es gibt also keine parametrisierte Initialisierung.

9 vs  Fernerzeugung eines privaten Objekts (CAO): Objekt wird auf anderem Rechner erzeugt, und der Erzeuger erhält einen Fernverweis darauf Server: RemotingConfiguration. RegisterActivatedServiceType(typeof(Server)); Klient – hier beispielhaft für Konstruktor mit 1 Argument: object[] attr = {new UrlAttribute("tcp://host:4711")}; object[] args = {"some constructor argument"}; Server s = (Server)Activator.CreateInstance( typeof(Server), args, attr);

10 vs Herausziehen der Argumente aus der Erzeugungsoperation und stattdessen Übergabe an eine Konfigurierungs-Operation ermöglicht Fernerzeugung mittels new (nur parameterlos!) für  und  : RemotingConfiguration. RegisterWellKnownClientType( typeof(Server), "tcp://host:4711/Service"); Server s = new Server(); // no Activator.GetObject RemotingConfiguration. RegisterActivatedClientType( typeof(Server), "tcp://host:4712/Service"); Server s = new Server(); // no Activator.CreateInstance

11 vs Programmbeispiele mit Anleitung zum Übersetzen und Konfigurieren: (Anhang)

12 vs Parametermechanismen Parameterübergabe in C#: op(int n) Wertparameter (call-by-value) op(ref int n) Variablenparameter (call-by-reference) op(out int n) Variablenparameter, evtl. nicht belegt... bei einfachen Typen. Bei Verweistypen zusätzlich.....

13 vs Parametermechanismen Parameterübergabe in C#: op(int n) Wertparameter (call-by-value) Bei Fernaufrufen: call-by-value op(ref int n) Variablenparameter (call-by-reference) Bei Fernaufrufen: call-by-value-result ! op(out int n) Variablenparameter, evtl. nicht belegt Bei Fernaufrufen: call-by-result !... bei einfachen Typen. Bei Verweistypen zusätzlich.....

14 vs Bei Verweistypen zusätzlich beachten (bei Argumenten und Ergebnissen!):  Wenn Objekt fernaufrufbar ( MarshalByRefObject ): Fernverweis wird übergeben;  sonst, wenn Objekt serialisierbar ( [Serializable] ): Objektkopie wird übergeben;  sonst: Ausnahmemeldung  Probleme wie bei Java RMI (7.1.5  )!7.1.5

15 vs Konfigurationsdateien Auslagerung der netzspezifischen Daten wie Rechnernamen, Portnummern, Protokollnamen, … aus dem Programmtext in Konfigurationsdateien (XML)  erlaubt deren Änderung ohne Neuübersetzung,  flexibilisiert die Installation,  verbessert die Verteilungsabstraktion. (Mehr dazu in )


Herunterladen ppt "1 7.1.6.NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von."

Ähnliche Präsentationen


Google-Anzeigen