Netzprogrammierung: Microsoft.NET Remoting



Ähnliche Dokumente
8.1.6.NET Remoting. C# ( Csharp, Cis ) : Referenzsprache für.net,

unterschiedlichen Sprachen

Der lokale und verteilte Fall

7.1.5 Java RMI Remote Method Invocation ( (

Java: Vererbung. Teil 3: super()

7.4 Verteilungsabstraktion in heterogener Umgebung

Prinzipien Objektorientierter Programmierung

Remote Method Invocation

Ein einfacher Server. .NET Remoting. Klassentypen

Java Virtual Machine (JVM) Bytecode

Vorkurs C++ Programmierung

Typumwandlungen bei Referenztypen

Innere Klassen in Java

Internet Explorer Version 6

Programmieren in Java

Themen. Web Service - Clients. Kommunikation zw. Web Services

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Erstellen sicherer ASP.NET- Anwendungen

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Programmierkurs Java

Powermanager Server- Client- Installation

Grundlagen von Python

OP-LOG

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

8.4 Microsoft.NET. .NET Framework = 1 CLR Common Language Runtime ist objektorientierte virtuelle Maschine für Ausführung von managed cod

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Objektorientierte Programmierung

Software Engineering Klassendiagramme Assoziationen

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1)

7.1.1 Grundzüge der Fernaufruf-Implementierung

QUICK INSTALLATION GUIDE

Einführung in die Programmierung

Software-Lizenzierung und Aktivierung: Verteilen von Software mit Apple Remote Desktop

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Algorithmen und Datenstrukturen

System-Update Addendum

Applet Firewall und Freigabe der Objekte

Java-Programmierung. Remote Method Invocation - RMI

Einführung in die Java- Programmierung

Übungen zu Softwaretechnik

Lizenz-Server überwachen

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

SSH Authentifizierung über Public Key

Adressen der BA Leipzig

4D Server v12 64-bit Version BETA VERSION

Installation der SAS Foundation Software auf Windows

ANLEITUNG NETZEWERK INSTALATION

Lokale Installation von DotNetNuke 4 ohne IIS

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Java RMI Remote Method Invocation

Große Übung Praktische Informatik 1

HBF IT-Systeme. BBU-BSK Übung 2 Stand:

INSTALLATION ABACUS ABAWEBCLIENT

INSTALLATIONSANLEITUNG der Version 2.1 (Jänner 2014)

Kommunikations-Parameter

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Samsung Large Format Display

Client-Server-Beziehungen

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

E.1 Objekt-Serialisierung

Zählen von Objekten einer bestimmten Klasse

11.1 Indirektes Binden (3) 11.1 Indirektes Binden (4) Objektadapterkonfiguration. Unmittelbarer Vorteil des indirekten Bindens

Workshop: Eigenes Image ohne VMware-Programme erstellen

Javakurs zu Informatik I. Henning Heitkötter

Einführung in die Programmierung für Wirtschaftsinformatik

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

TimeMachine. Time CGI. Version 1.5. Stand Dokument: time.odt. Berger EDV Service Tulbeckstr München

Zugriff auf OWA Auf OWA kann über folgende URLs zugegriffen werden:

Installationsanleitung WibuKey Treiber

SEP 114. Design by Contract

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Computeria Solothurn

WebService in Java SE und EE

Whitepaper. Produkt: combit Relationship Manager. Einrichtung für Remotedesktopdienste (Windows Server 2008 R2)

Installation EPLAN Electric P8 Version Bit Stand: 07/2014

C# im Vergleich zu Java

Studentische Lösung zum Übungsblatt Nr. 7

Javakurs 2013 Objektorientierung

Kapitel 6. Vererbung

Virtual Private Network

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Benutzeranleitung (nicht für versierte Benutzer) SSH Secure Shell

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Arbeiten am Client. Achtung: Während der gesamten Vorbereitungsarbeiten darf das Programm MS Outlook auf keinen Fall geöffnet werden!

Visual Basic Express erstes Projekt anlegen

License Management SDK

Exception Handling, Tracing und Logging

Java Einführung Packages

Version 0.3. Installation von MinGW und Eclipse CDT

Psyprax GmbH. Netzwerk Installation unter XP. Wichtig für alle Netzwerkinstallationen: Psyprax GmbH

Erstellen eines Office-COM-Add-In mit Visual Basic 2005 Express Edition

Transkript:

Netzprogrammierung: Microsoft.NET Remoting Robert Tolksdorf und Peter Löhr

Überblick 1. Fernaufrufbare Objekte 2. Parameterübergabe 3. Konfigurationsdateien http://msdn.microsoft.com/en-us/library/72x4h507(vs.85).aspx (.NET Framework 3.0) Robert Tolksdorf und Peter Löhr 2

Fernaufrufbare Objekte Robert Tolksdorf und Peter Löhr

.NET.NET ( dotnet ) : von Microsoft eingeführte Plattform für verteilte Anwendungen: virtuelle Maschine CLR (common language runtime) für die verteilte Ausführung von Programmen, deren Klassen in unterschiedlichen Sprachen geschrieben sein können C#, C++, J#, Visual Basic, Eiffel, Jscript,... C# (dt. Cis, engl. C-sharp ) : Referenzsprache für.net, Microsoft s Antwort auf Java.NET Remoting : Fernaufrufe auf der.net-plattform Robert Tolksdorf und Peter Löhr 4

.NET Remoting Fernaufrufbarkeit wird nicht an Schnittstellen, sondern an Klassen festgemacht: eine Klasse für fernaufrufbare Objekte wird als Unterklasse der Bibliotheksklasse System.MarshalByRefObject vereinbart, z.b. class TextStore : MarshalByRefObject {... } statt interface Text extends Remote {... } wie in Java. Methoden von MarshalByRefObject : geerbte Methoden von Object (Equals, tostring,...) CreateObjectRef liefert ObjectRef-Objekt, das Informationen für die explizite Herstellung eines Objektvertreters (proxy) enthält... Robert Tolksdorf und Peter Löhr 5

Objekterzeugung in 3 Varianten... für fernaufrufbare Objekte auf einem Rechner R: Fernerzeugung eines privaten Objekts: Objekt wird mit new erzeugt, aber auf anderem Rechner R; der Erzeuger erhält einen Fernverweis. Fernerzeugung eines öffentlichen Objekts: Erzeugung wird auf R lokal vorbereitet, aber erst beim ersten Zugriff eines Klienten durchgeführt. Bekanntmachung eines öffentlichen Objekts: Objekt wird auf R erzeugt und dann veröffentlicht. (Dies entspricht der Erzeugung bei Java RMI.) Robert Tolksdorf und Peter Löhr 6

Fernerzeugung eines privaten Objekts Terminologie: client-activated object (CAO) Der Anbieter vereinbart einen Port, über den er erreichbar ist, und registriert eine Klasse wie z.b. TextStore beim lokalen Fernaufrufsystem. Der Klient stellt unter Angabe der gewünschten Klasse TextStore über sein lokales Fernaufrufsystem die Verbindung zum Anbieter her und kann mit new TextStore ein Objekt fernerzeugen. Robert Tolksdorf und Peter Löhr 7

Anbieter registriert Klasse using System; // import library name spaces using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; public class TextStore : MarshalByRefObject { string text; public TextStore(string init) { text = init; } public void replace(string s) { text = s; return; } public string remove() { string result = text; text = null; return result; } public static void Main() { ChannelServices.RegisterChannel(new TcpServerChannel(4711)); RemotingConfiguration.RegisterActivatedServiceType( typeof(textstore)); Console.WriteLine("press ENTER to stop server."); Console.ReadLine(); } } Robert Tolksdorf und Peter Löhr 8

Fernerzeugung durch Klienten using System; using System.Runtime.Remoting; public class Test { public static void Main() { RemotingConfiguration.RegisterActivatedClientType( typeof(textstore), "tcp://localhost:4711"); TextStore text = new TextStore("initial text"); Console.WriteLine(text.remove()); // writes "initial text Console.WriteLine("press ENTER for another try:"); Console.ReadLine(); Console.WriteLine(text.remove()); // raises exception } } Beachte: Hier besteht kein Bedarf für ein rmiregistry. Robert Tolksdorf und Peter Löhr 9

Übersetzen und Testen (lokal) Übersetzen: C:\> csc server.cs C:\> csc /t:library server.cs C:\> csc /r:server.dll client.cs Programm server erzeugen Klasse server.dll bereitstellen (Windows dynamic link library,.net assembly) Programm client erzeugen Testen:... und dann: C:\> client initial text press ENTER for another try: in separatem Fenster: C:\> server press ENTER to stop server.... ohne Aufsetzen eines Registry! Robert Tolksdorf und Peter Löhr 10

Öffentliches Objekt bekanntmachen Bereitstellung eines fernaufrufbaren Objekts - ebenfalls ohne Aufsetzen eines Registry: Port registrieren: TcpChannel channel = new TcpServerChannel(4711); ChannelServices.RegisterChannel(channel); Objekt erzeugen: Server server = new Server(); Objekt mit mnemonischem Namen registrieren: RemotingServices.Marshal(server, "ServerObject"); Nachdem dies auf dem Rechner host ausgeführt wurde, beschaffen Klienten sich einen Fernverweis wie folgt: Server s = (Server)Activator.GetObject( typeof(server), "tcp://host:4711/serverobject"); Robert Tolksdorf und Peter Löhr 11

Schnittstellen verwenden! C:\> csc /r:server.dll client.cs Programm client erzeugen (von S. 10) mit Bezugnahme auf den Anbieter-Code ist nur für einfache lokale Tests praktikabel. Falls Implementierung des Dienstes (Klasse Server) nicht beim Klienten bekannt, Schnittstelle verwenden: public interface Service {... } public class Server : Service, MarshalByRefObject { public static void Main(string[] arg) {... }... public class Client {...... Service s = (Service )Activator.GetObject( typeof(service), "tcp://taos:4711/serverobject");... Robert Tolksdorf und Peter Löhr 12

Parameterübergabe Robert Tolksdorf und Peter Löhr

Parametermechanismen in C# op(int i) Wertparameter (call-by-value) Bei Fernaufrufen: call-by-value op(ref int i) op(out int i) Variablenparameter (call-by-reference) Bei Fernaufrufen: call-by-value-result! Variablenparameter, evtl. nicht belegt Bei Fernaufrufen: call-by-result! Beim Aufruf auch ref bzw. out, z.b. op(ref n) --> Bei ref drohen Verletzungen der Verteilungsabstraktion! Robert Tolksdorf und Peter Löhr 14

Variablenparameter Beispiel für abweichende Sematik: public void inc(bool cond, ref int x, ref int y) { if(cond) x++; else y++; }? Effekt von ob.inc(cond, ref a[i], ref a[k]);? Jedenfalls sollte ein Element des Feldes a erhöht sein (auch im Fall i==k).! Bei Fernaufruf kein Effekt falls cond && i==k! Robert Tolksdorf und Peter Löhr 15

Verweistypen Bei Verweistypen zusätzlich beachten (bei Argument- und Ergebnis-Objekten): Wenn Objekt fernaufrufbar (MarshalByRefObject): Fernverweis wird übergeben; sonst, wenn Objekt serialisierbar ( [Serializable] *): Objektkopie wird übergeben; sonst: Ausnahmemeldung. --> Verletzungen der Verteilungsabstraktion drohen! (vgl. Java RMI) * ein der Klassenvereinbarung vorangestelltes Attribut: [Serializable] class... Robert Tolksdorf und Peter Löhr 16

Verweistypen Wenn von einem Objekt nur eine Schnittstelle bekannt ist, kann sich dahinter ein MarshalByRefObject verbergen - oder auch nicht. Wenn ja, kann es tatsächlich in einem anderen Rechner liegen - oder auch nicht. (Vgl. Java RMI, Parametersemantik) Ohne genauere Typanalyse kann daher nicht entschieden werden, ob für einen zum/vom Objekt übertragenen Serializable Parameter ein Verweis oder eine Kopie übertragen wird. interface IStack {... } class Stack : IStack {... } class RemoteStack : IStack, MarshalByRefObject {... }... void op(istack stack) {... a = stack.dump();... } Robert Tolksdorf und Peter Löhr 17

Konfigurationsdateien Robert Tolksdorf und Peter Löhr

Auslagerung der netzspezifischen Daten wie Rechnernamen und Portnummern u.a. aus dem Programmtext in Konfigurationsdateien (XML) erlaubt deren Änderung ohne Neuübersetzung, flexibilisiert die Installation, verbessert die Verteilungsabstraktion. Robert Tolksdorf und Peter Löhr 19

Struktur Typische Struktur einer Konfigurationsdatei: <configuration> <system.runtime.remoting> <application> <channels>... </channels> <service>... </service> <client>... </client> </application> </system.runtime.remoting> </configuration> Robert Tolksdorf und Peter Löhr 20

Beispiel Fernerzeugung eines öffentlichen Objekts (SAO - server-activated object) Beim Anbieter wird Objekterzeugung vorbereitet: ChannelServices.RegisterChannel(new TcpServerChannel(4711)); RemotingConfiguration.RegisterWellKnownServiceType( typeof(server), "ServerObject", WellKnownObjectMode.Singleton); Klient beschafft sich Fernverweis (impliziert ggfls. Erzeugung): Server s = (Server)Activator.GetObject( // wie Klient auf s. 11 typeof(server), "tcp://host:4711/serverobject"); Robert Tolksdorf und Peter Löhr 21

Benutzung einer Konfigurationsdatei Im Anbieter wird ChannelServices.RegisterChannel(new TcpServerChannel(4711)); RemotingConfiguration.RegisterWellKnownServiceType( typeof(server), "ServerObject", WellKnownObjectMode.Singleton); ersetzt durch RemotingConfiguration.Configure("server.exe.config"); Name einer Konfigurationsdatei für das Programm (in Datei server.exe) Robert Tolksdorf und Peter Löhr 22

Konfigurationsdatei für den Anbieter Inhalt der Konfigurationsdatei server.exe.config : <configuration> <system.runtime.remoting> <application> <channels> <channel ref="tcp" port="4711"/> </channels> Klasse Assembly (server.dll) <service> <wellknown mode="singleton" type="server, server" objecturi="serverobject"/> </service> </application> </system.runtime.remoting> </configuration> Robert Tolksdorf und Peter Löhr 23

... und beim Klienten Im Klienten wird Server s = (Server)Activator.GetObject( // wie Klient auf s. 11 typeof(server), "tcp://host:4711/serverobject"); ersetzt durch RemotingConfiguration.Configure("client.exe.config"); Name einer Konfigurationsdatei für das Programm (in Datei client.exe) Robert Tolksdorf und Peter Löhr 24

Konfigurationsdatei für den Klienten Inhalt der Konfigurationsdatei client.exe.config : <configuration> <system.runtime.remoting> <application> <client> <wellknown type="server, client" url="tcp://host:4711/serverobject"/> </client> </application> </system.runtime.remoting> </configuration> Robert Tolksdorf und Peter Löhr 25

Zusammenfassung Robert Tolksdorf und Peter Löhr

Zusammenfassung Objekterzeugung - 3 verschiedene Techniken: Fernerzeugung eines privaten Objekts (CAO) Fernerzeugung eines öffentlichen Objekts (SAO) Bekanntmachung eines lokal erzeugten Objekts Kein separates Registry erforderlich stattdessen explizite Port-Angabe nötig Parameterübergabe: Abstraktionsschwächen Variablenparameter: Wert/Ergebnis-Übergabe Serializable: statt Verweis wird Objektkopie übergeben Konfigurationsdateien formuliert in XML entlasten den Programmcode ermöglichen Änderung der Konfigurationsdaten ohne Neuübersetzung (offen geblieben: Sicherheit, Leasing, HTTP,... ) Robert Tolksdorf und Peter Löhr 27

Literatur S. McLean:.NET Remoting. Microsoft Press 2002 I. Rammer: Advanced.NET Remoting. apress 2002 (2. ed. 2006) M. Kuhrmann, E. Horn, J. Calame: Verteilte Systeme mit.net Remoting. Spektrum 2004 http://msdn.microsoft.com/en-us/library/72x4h507(vs.85).aspx (.NET Framework 3.0) Robert Tolksdorf und Peter Löhr 28