15
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 Programmen in unterschiedlichen Sprachen C# („Csharp“, „Cis“) : Referenzsprache für .NET, Microsoft‘s Antwort auf Java .NET Remoting : Fernaufrufe auf der .NET-Plattform http://msdn.microsoft.com/library/en-us/dndotnet/html/hawkremoting.a http://msdn.microsoft.com/library/en-us/dndotnet/html/introremoting. http://www.ingorammer.com/remotingFAQ http://www.inf.fu-berlin.de/~lohr/slides/dotnetrem.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

Embed Size (px)

Citation preview

Page 1: 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

1

7.1.6 .NET Remoting

.Net („dotnet“) : von Microsoft eingeführte Plattformfür verteilte Anwendungen,

virtuelle Maschine für die verteilteAusführung von Programmen inunterschiedlichen Sprachen

C# („Csharp“, „Cis“) : Referenzsprache für .NET,

Microsoft‘s Antwort auf Java

.NET Remoting : Fernaufrufe auf der .NET-Plattform

http://msdn.microsoft.com/library/en-us/dndotnet/html/hawkremoting.asphttp://msdn.microsoft.com/library/en-us/dndotnet/html/introremoting.asphttp://www.ingorammer.com/remotingFAQ http://www.inf.fu-berlin.de/~lohr/slides/dotnetrem.ppt

Page 2: 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

vs7.1.6 2

7.1.6.1 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;}

}

Page 3: 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

vs7.1.6 3

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 danndurchgefü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

Page 4: 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

vs7.1.6 4

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 !

Page 5: 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

vs7.1.6 5

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

Page 6: 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

vs7.1.6 6

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 fernaufrufbareObjekte ist üblich, aber nicht obligatorisch.

Page 7: 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

vs7.1.6 7

Fernerzeugung eines öffentlichen Objekts (SAO):Erzeugung wird lokal vorbereitet, aber erst danndurchgefü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)

Page 8: 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

vs7.1.6 8

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.

Page 9: 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

vs7.1.6 9

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);

Page 10: 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

vs7.1.6 10

Herausziehen der Argumente aus der Erzeugungsoperation undstattdessen Übergabe an eine Konfigurierungs-Operation ermöglichtFernerzeugung 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

Page 11: 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

vs7.1.6 11

Programmbeispiele

mit Anleitung zum Übersetzen und Konfigurieren:

http://www.inf.fu-berlin.de/~lohr/slides/dotnetrem.ppt (Anhang)

Page 12: 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

vs7.1.6 12

7.1.6.2 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 .....

Page 13: 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

vs7.1.6 13

7.1.6.2 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 belegtBei Fernaufrufen: call-by-result !

... bei einfachen Typen. Bei Verweistypen zusätzlich .....

Page 14: 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

vs7.1.6 14

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)!

Page 15: 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

vs7.1.6 15

7.1.6.3 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 http://www.inf.fu-berlin.de/~lohr/slides/dotnetrem.ppt )