E.1 Objekt-Serialisierung



Ähnliche Dokumente
C.1 Objekt-Serialisierung

B.1.NET-Anwendungen bauen und binden

L.1.NET-Anwendungen bauen und binden

Ein einfacher Server. .NET Remoting. Klassentypen

Prof. W. Henrich Seite 1

Objektorientierte Programmierung

Einführung in die Programmierung

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

D.1.NET-Anwendungen bauen und binden

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Java RMI Remote Method Invocation

.NET Remoting. Softwareentwicklung mit MS.NET und C# Lokaler Proxy. Proxy. Remoting. .NET Remoting

Delegatesund Ereignisse

ObjectBridge Java Edition

Remote Method Invocation

Algorithmen und Datenstrukturen

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

Vererbung & Schnittstellen in C#

Einführung in die Java- Programmierung

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Komponenten & Frameworks Seite 1

Übungen zu Softwaretechnik

VS Praktikum 03 Konzept

Programmieren in Java

1 Remotekonfigurationsdatei. 1 Remotekonfigurationsdatei. 1 Remotekonfigurationsdatei. Server <application> <service> Advanced.

Der lokale und verteilte Fall

Anbindung des eibport an das Internet

Große Übung Praktische Informatik 1

Wiederholung: Beginn

Java: Vererbung. Teil 3: super()

Vorkurs C++ Programmierung

Java Virtual Machine (JVM) Bytecode

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Studentische Lösung zum Übungsblatt Nr. 7

WebService in Java SE und EE

WPF Steuerelemente Listbox, ComboBox, ListView,

Architektur des agimatec-validation Frameworks

Grundlagen von Python

Technische Dokumentation SilentStatistikTool

Zählen von Objekten einer bestimmten Klasse

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

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Objektorientierte Programmierung. Kapitel 12: Interfaces

Factory Method (Virtual Constructor)

MC-Hx 006. Einbindung des MC-Hx Modul als MODBus TCP Slave. MB DataTec GmbH. Stand:

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

3 Objektorientierte Konzepte in Java

teamsync Kurzanleitung

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

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Typumwandlungen bei Referenztypen

Java-Programmierung. Remote Method Invocation - RMI

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

EJBs und Sicherheit. Vorlesung: Applikationsserver. Prof. Dr. Ch. Reich furtwangen.de furtwangen.

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

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

unterschiedlichen Sprachen

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Assoziation und Aggregation

ISA Server 2004 Erstellen einer Webverkettung (Proxy-Chain) - Von Marc Grote

License Management SDK

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

U08 Entwurfsmuster (II)

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

MCRServlet Table of contents

Objektbasierte Entwicklung

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

WinVetpro im Betriebsmodus Laptop

Prinzipien Objektorientierter Programmierung

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

Software Engineering Klassendiagramme Einführung

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

MSDE 2000 mit Service Pack 3a

Javakurs zu Informatik I. Henning Heitkötter

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Themen. Web Services und SOA. Stefan Szalowski Daten- und Online-Kommunikation Web Services

Arbeiten mit UMLed und Delphi

Klassenbeziehungen & Vererbung

Die Backup-Voreinstellungen finden Sie in M-System Server unter dem Reiter "Wartung".

Kommunikations-Parameter

WCF Services in InfoPath 2010 nutzen

Javakurs 2013 Objektorientierung

WLAN Konfiguration. Michael Bukreus Seite 1

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

SUB-ID- VERWALTUNG MIT GPP SETUP-GUIDE FÜR PUBLISHER

Software Engineering Interaktionsdiagramme

Programmierkurs Java

Nutzung von GiS BasePac 8 im Netzwerk

Client-Server-Beziehungen

Anwendungshinweis Nr. 12. Wie konfiguriere ich redundante Serververbindungen

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Tritt beim Aufruf ein Fehler aus, so wird eine MessageBox mit dem Fehlercode und der Kommandozeile angezeigt.

Proxy. Krishna Tateneni Übersetzer: Stefan Winter

Ein neues Outlook Konto können Sie im Control Panel über den Eintrag Mail erstellen.

AutoCAD Dienstprogramm zur Lizenzübertragung

Transkript:

E Überblick über die 13. Übung E Überblick über die 13. Übung E.1 Serialisierung (2) Objekt-Serialisierung Wie soll ein Objekt serialisiert werden? serveraktivierte Objekte IFormatter Schnittstelle stellt Methoden bereit um ein Objekt zu serialisieren: vom Client aktivierte Objekte void Serialize(Stream outstream, object graph); lease-based Garbage Collection object Deserialize(Stream instream); Metadaten-Assemblies Implementierungen von IFormatter: Formatter: abstrakte Basisklasse für eigene Implementierungen SoapFormatter: Ausgabe im ASCII-Format (SOAP) BinaryFormatter: kompakte, binäre Ausgabe E.1 E.3 E.1 Serialisierung (3) - Beispiel Attribut [Serializable] markiert serialisierbare Klassen (transitiv) Instanzvariablen werden automatisch serialisiert Serialisierung mittels Serialize: using System.IO; using System.Runtime.Serialization.Formatters.Soap; Variablen, die mit [NonSerialized] markiert sind werden nicht serialisiert Beispiel: [Serializable] public class Account { private int value = 0; Account myaccount = new Account(100); FileStream myfile = File.Create("Account.txt"); new SoapFormatter().Serialize(myFile, myaccount); myfile.close(); [NonSerialized] private Bank currentbank; Deserialisierung mittels Deserialize: FileStream myfile = File.Open("Account.txt", FileMode.Open); public Account (int cash) { value = cash; Account myaccount = (Account) new SoapFormatter().Deserialize(myFile); myfile.close(); E.2 E.4

E.1 Serialisierung (4) E.2 Marshalling E.2 Marshalling Was soll serialisiert werden? Standard: Marshal by Value (MBV) Beeinflussen der Serialisierung durch implementieren der Schnittstelle ISerializable: Marshal by Referenz (MBR) durch ableiten von MarshalByRefObject Methode um das Objekt zu serialisieren, wird von der CLR aufgerufen public void GetObjectData (SerialisationInfo info, StreamingContext context); Deserialisierungskonstruktor mit folgenden Parametern: (SerializationInfo info, StreamingContext context); Objektreferenz = ObjRef-Objekt enthält Informationen über: Name des Objekts incl. Name des Assembly Typeninformationen über alle Basisklassen des Objekts Typinformationen über alle implementierten Schnittstellen die Adresse (URI) des Objekts incl. Informationen über den Kanal des Servers E.5 E.7 E.1 Serialisierung (5) - Beispiel E.3 Proxies E.3 Proxies Beispiel [Serializable] public class Account : ISerializable{ private int amount; private Signatur mysig; [NonSerializable] private Bank currentbank; public void GetObjectData (SerializationInfo info, StreamingContext context) { info.addvalue("amount", amount); info.addvalue("mysignatur", mysig); if (ctx.state == StreamingContextStates.CrossProcess) ;// Objekt wird an einem anderen Prozess übertragen public Account(SerializationInfo info, StreamingContext ctx){ amount = info.getint32("amount"); mysig = (Signatur) info.getvalue("mysignatur", typeof(signatur)); E.6 implementieren die Methoden und Attribute des entfernten Objekts werden dynamisch erzeugt transparenter Proxy: z.b.: durch Activator.GetObject die Laufzeitumgebung kann damit die Anzahl und den Typ der Parameter prüfen kann nicht verändert werden leitet Methodenaufruf an echtes Objekt weiter lokales Objekt: Methodenaufruf entferntes Objekt: Argumente in IMessage Objekt packen mittels Invoke an den RealProxy übergeben E.8

E.3 Proxies (2) E.3 Proxies E.4 Channels und Formatter (2) E.4 Channels und Formatter RealProxy ebenfalls dynamisch erzeugt kann erweitert und verändert werden Standardimplementierung von Invoke: Kanäle müssen bei der Laufzeitumgebung registriert werden Klasse ChannelServices pro Application Domain kann immer nur ein Kanal des selben Typs registriert werden (Bsp: 1xTCP,1xHTTP, aber nicht 2xTCP) IMessage Objekt an Kanal weitergeben Activator.GetObject(...) erzeugt einen transparenten Proxy für einen serveraktiviertes Objekt keine Netzwerkinteraktion bei der Erstellung erst wenn eine Methode am Proxy aufgerufen wird Kanal ist als Kette von Senken organisiert: im Kanal wird eine Kette von Senken durchlaufen. Durch einfügen einer eigenen Senke kann man einfluss auf die Übertragung nehmen erste Senke ist üblicherweise der Formatter letzte Senke ist der Transportdienst E.9 E.11 E.4 Channels und Formatter E.4 Channels und Formatter E.5 Serveraktivierte vs. Clientaktivierte Objekte E.5 Serveraktivierte vs. Clientaktivierte Objekte Channel: verantwortlich für den Transport eines Methodenaufrufes und dessen Rückgabewertes über das Netzwerk Beispiel: TCPChannel: jeder Kanal benötigt einen eigenen Port HTTPChannel: flexibler, mehrere Verbindungen können über Port 80 laufen Formatter: Serialisiert die Objekte und legt somit das Format eines serialisierten Objekts fest Beispiel.: BinaryFormatter: Standard für TCPChannel SOAPFormatter: Standard für HTTPChannel E.10 Einstiegspunkte in "Server" serveraktiviert Objekte, bekannte Typen (server-activated / well-known Objects) besitzen einen eindeutgen, bekannten Namen Laufzeitumgebung instantiiert das Objekt mittels Standardkonstruktor Aktivierungsmodus bestimmt die Lebenszeit: SingelCall: wird nach jedem Aufruf zerstört Singleton: bleibt nach einem Aufruf am Leben clientaktivierte Objekte/Typen können vom Client mit beliebigem Konstruktor erstellt werden Lebenszeit: wird durch Lease-based Garbage Collection vorgegeben E.12

1 Singleton vs. SingleCall Singleton: Lebenszeit: lease-based Lifetime Anforderungen werden in separaten Threads ausgeführt bei modifizierenden Zugriffen ist evtl. Synchronisation notwendig! (System.Threading oder Schlüsselwort lock) SingleCall: für jede Anforderung wird ein eigenes Objekt erzeugt keine Zustandsübermittlung zwischen Clients/Aufrufen E.13 (3) - Server - Beispiel using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; namespace BankServer { class ServerMain { static void Main (String[] args) { HttpChannel channel = new HttpChannel(4711); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownServiceType( typeof(banklibrary.bank), "MyURI.soap", WellKnownObjectMode.Singleton); Console.WriteLine("server startet"); Console.ReadLine(); hier wird noch kein Objekt erstellt E.15 (2) - Server (4) - Client System.Runtime.Remoting.dll wird benötigt eine Referenz auf das entsprechende Assembly hinzufügen benötigte Informationen vom Server Name des Servers Klasse von MarshalByRefObject ableiten und implementieren Kanal auswählen und mittels ChannelService.RegisterChannel registrieren Die Klasse als "well-known object" registrieren, mittels RemotingConfiguration.RegisterWellKnownServiceType. Typ des verwendeten Kanals Port-Nummer an welcher der Server wartet Die URI des entfernten Objekts System.Runtime.Remoting.dll wird benötigt eine Referenz auf das entsprechende Assembly hinzufügen Auf Anfragen von Clients warten BankLibrary Assembly wird benötigt, da es die Metadaten (z.b. Methodensignaturen) enthält, die benötigt werden um einen Proxy zu erstellen Kanal, vom selben Typ wie der des Servers registrieren E.14 mittels Activator.GetObject(...) einen Proxy erzeugen. Den Proxy in den entsprechenden Typ umwandeln und verwenden E.16

(5) - Client - Beispiel using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; using BankLibrary; namespace BankClient { class ClientMain { public static void Main(String[] args) { HttpChannel channel = new HttpChannel(); ChannelServices.RegisterChannel(channel); Object remoteobj = Activator.GetObject( typeof(banklibrary.bank), "http://localhost:4711/myuri.soap" ); Bank bank = (Bank)remoteObj; Account account = new Account(); bank.deposit(account, 3); E.17 E.7 Clientaktivierte Objekte E.7 Clientaktivierte Objekte Serveraktivierte Objekte werden immer mit dem Standardkonstruktor erstellt class ClientMain { public static void Main(String[] args) { RemotingConfiguration.RegisterWellKnownClientType( typeof ( BankLibrary.Bank ), "http://localhost:4711/myuri.soap"); new Bank("Sparkasse"); Clientaktivierte Objekte: für jeden Client wird eine eigene Instanz am Server erzeugt die Instanz bleibt über mehrere Aufrufe hinweg aktiv. // runtime exception!! E.19 (6) - Client Alternative zu Activator.GetObject: Als entfernter Typ registrieren: RemotingConfiguration.RegisterWellKnownClientType( typeof ( BankLibrary.Bank ), "http://localhost:4711/myuri.soap"); new Bank(); E.7 Clientaktivierte Objekte (2) - Server using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; namespace BankServer { class ServerMain { E.7 Clientaktivierte Objekte static void Main (String[] args) { HttpChannel channel = new HttpChannel(4711); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterAcivatedServiceType( typeof(banklibrary.bank)); Console.WriteLine("server startet"); Console.ReadLine(); E.18 E.20

E.7 Clientaktivierte Objekte (2) - Client using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; using BankLibrary; namespace BankClient { class ClientMain { public static void Main(String[] args) { HttpChannel channel = new HttpChannel(); ChannelServices.RegisterChannel(channel); E.7 Clientaktivierte Objekte RemotingConfiguration.RegisterActivatedClientType( typeof ( BankLibrary.Bank ), "http://localhost:4711"); Bank bank = new Bank("Sparkasse"); E.21 (2) - Beispiel Server: <service>... </service> <channel port = 4711 type="system.runtime.remoting.channels.http.httpchannel, System.Runtime.Remoting, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> Client: <client>... </client> <channel type="..." /> E.23 (3) zur einfachen Konfiguration der Kanäle und registrierten Objekte Format: XML Position und Name:beliebig meist jedoch in Anwendungskonfigurationsdatei <configuration> <system.runtime.remoting>... </system.runtime.remoting> </configuration> Kanal-Vorlagen: <configuration> <system.runtime.remoting> <channel port=4711 ref="mychannel" /> <channel id="mychannel" type="..." /> </system.runtime.remoting> </configuration> Einlesen: RemoteingConfiguration.Configure("Customer.exe.config"); vordefinierte Vorlagen z.b.: http, tcp E.22 E.24

(2) - Beispiel E.8 lease-based Garbage Collector serveraktiviertes Objekt: Server DCOM: <service> <wellknown mode="singleton" type="banklibrary.bank, Bank" objecturi="myuri.soap" /> </service> <channel port = 4711 type="http" /> Verweiszähler durch "pings" werden nicht erreichbare Clients entdeckt.net: lease-based GC: jedem Objekt wird eine bestimmte Zeit (Lease) eingeräumt, während der es nicht gelöscht wird durch die Nutzung des Objekts kann die Lease verlängert werden serveraktiviertes Objekt: Client <client displayname="bankclient"> <wellknowntype="banklibrary.bank, Bank" url="http://localhost:4711/myuri.soap" /> </client> <channel type="http" /> E.25 lease-based GC wird für Singleton und clientaktivierte Objekte verwendet MarshalByRefObject.GetLifetimeService() liefert ein Objekt vom Typ ILease mit Informationen zur Lebenszeit: public class myclass : MarshalByRefObject { public example() { ILease mylease = (ILease)this.GetLeaseTime(); E.27 (2) - Beispiel E.8 lease-based Garbage Collector (2) clientaktiviertes Objekt: Server <service> <activated type="banklibrary.account, Bank" /> </service> <channel port=4711 id="http" /> clientaktiviertes Objekt: Client <client url="http://localhost:4711" > <activated type="banklibrary.account, Bank" /> </client> <channel type="http" /> E.26 Eigenschaften des ILease Interfaces: TimeSpan CurrentLeaseTime (nur lesbare) verbleibende Zeit, bis das Objekt gelöscht werden kann TimeSpan InitialLeaseTime Zeit, die ein Objekt nach der Erzeugung bekommt. (Standard: 5 Minuten) TimeSpan RenewOnCallTime Zeit, die ein Objekt nach einem Aufruf mindestens noch am Leben bleibt (Standard: 2 Minuten) LeaseState CurrentState Zustand der Lease: Active, Expired, Initial, Null oder Renewing Methoden: void Register(ISponsor) einen Sponsor registrieren E.28

E.8 lease-based Garbage Collector (3) Konfiguration der Lease-Zeiten für alle Objekte einer Anwendung: durch Remotekonfigurationsdatei <lifetime leasetime="10s" renewoncalltime="5s" /> <service> <activated type="banklibrary.account, Bank" /> </service> <channel port = 4711 type="http" /> für einzelne Objekte: InitializeLifetimeService überschreiben public override object InitializeLifetimeService() { ILease leaseinfo = (ILease)base.InitializeLifetimeService(); leaseinfo.initialleasetime = TimeSpan.FromSeconds(7); leaseinfo.renewoncalltime = TimeSpan.FromSeconds(3); // unendliche Laufzeit: InitialLeaseTime = TimeSpan.Zero // oder: return null; return leaseinfo; E.29 Problem: Client benötigt Metadaten zur Erstellung des Proxies bisher: Assembly muss auch auf Clientseite vorhanden sein Alternativen: entferntes Objekt von Interface ableiten Interface Assembly ist sowohl beim Client als auch beim Server vorhanden Nachteil: von einem Interface kann man kein Objekt erzeugen keine clientaktivierte Objekte serveraktivierte Ojekte müssen mittels Activator.GetObject angesprochen werden Metadaten Assembly Assembly mit gleichem Namen und gleichen Klassen incl. Methoden wie auf Serverseite, jedoch ohne Implementierung E.31 E.8 lease-based Garbage Collector (4) - Sponsoren (2) - soapsuds auf Clientseite ist die Lease abgelaufen, so werden alle Sponsoren gefragt, ob die Lease verlängert werden soll Sponsor implementiert das Interface ISponsor public TimeSpan Renew (ILease leaseinfo) wenn 0 zurückgegeben wird, so wird der Sponsor von der Liste entfernt registrieren mittels ILease.Register(ISponsor) Tool: soapsuds.exe erzeugt Metadaten-Assemblies auf Clientseite: > soapsuds -url:http://localhost:4711/myuri.soap?wsdl -oa BankProxy.dll erzeugt ein Proxy-Assembly, Proxy kann mittels new instantiiert werden, Serveradresse ist fest codiert weitere Einstellungsmöglichkeiten: <lifetime leasetime="10s" renewoncalltime="5s" sponsorshiptimeout="5s" leasemanagerpolltime="10s"/> Alternative Ausgabeformate: C#: > soapsuds -url:http://localhost:4711/myuri.soap?wsdl -gc BankProxy.cs WSDL (Web Services Description Language): > soapsuds -url:http://localhost:4711/myuri.soap?wsdl -os bank.wsdl E.30 E.32

(3) - soapsuds auf Clientseite bei clientactivierten Objekten: > soapsuds -url:http://localhost:4711/ RemoteApplicationMetadata.rem?wsdl -oa BankProxy.dll liefert Metadaten für alle verwendbaren Objekte incl. "well-known" Objekte Nachteil: zu den Objekten werden keine Informationen über mögliche Konstruktoren erzeugt E.33 E.35 (4) - soapsuds auf Serverseite auf Serverseite: > soapsuds -ia Bank -oa BankProxy.dll oder nur einzelne Typen: > soapsuds -types:banklibrary.bank,bank;banklibrary.account,bank -oa BankProxy.dll Proxy mit fest codierter URL möglich: > soapsuds -types:banklibrary.bank,bank,http://localhost:4711/ MyURI.soap;BankLibrary.Account,Bank -oa BankProxy.dll E.34