1 7.1.6.NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte...

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

Transcript of 1 7.1.6.NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte...

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 )