VL5
Transcription
VL5
Mircosoft DotNot Verteilte Anwendungen „the microsoft(cc) way“ Verteilte Anwendungen (04/05) T.S. (JD) 1 Die DotNet-Plattform • Microsofts zukünftige Plattform für die Erstellung (verteilter) Anwendungen Zusammenfassung bestehender und zukünftiger Produkte in eine „Architektur“ – Sehr starke Anleihen bei Java/J2EE – Ziel: Software Dienstleistung, Erstellung von Webservices 1996 Internet 1. Gen IE/IIS 1997 Internet 2.Gen. 2000 Internet 3. Gen. WinDNA .NET 1992 Client/Server Win32 1. Generation 1994-1996 2. Generation 1996-2000 3. Generation 2000- Statische Seiten Dynamische Seiten Nutzung von Diensten E-Mail, Basisinformationen Personalisierung, E-Commerce Web Services IE/IIS Windows DNA Microsoft .NET Die Geschichte der Computernetzwerke nach Microsoft [SIC!] Verteilte Anwendungen (04/05) T.S. (JD) 2 Bestandteile der DotNet-Plattform • DotNet-Framework und Tools – – – – • Building Block Services (Foundation Services) – • Gesamtheit der DotNet-Webservices (Passport® etc.) Enterprise Server – – • Klassenbibliothek CLR ASP.Net Entwicklungstools Infrastruktur gesammelte herkömmliche M$-Produkte DotNet Device Software (Mobile Devices) – – Endgeräte-Anbindung insbesondere Mobile Endgeräte WinCE Verteilte Anwendungen (04/05) T.S. (JD) 3 DotNet-Framework VB C++ C# JScript J# Common Language Specification Windows Forms ADO.NET and “XML” Klassenbibliothek (“Base Class Library”) Visual Studio.NET ASP.NET Web Forms Web Services Mobile Internet Toolkit Common Language Runtime Betriebssystem Verteilte Anwendungen (04/05) T.S. (JD) 4 DotNet-Framework Ziele • Mehrsprachigkeit – – • C#, C++, VB.NET „Offenlegung“ von DotNet (CLR und CTS) ermöglicht Anbieten weiterer Programmiersprachen durch Dritte* Einfache Entwicklung – Common Type System • Für alle einheitliches Objektmodell Gemeinsame Wurzel: Object • Vererbung zwischen unterschiedlichen Sprachen – • Einfache Installation – • Verteiltes Garbage Collection Selbsbeschreibende Komponenten Stabile Ausführung * Offenlegung ermöglicht theoretisch weiterhin Plattformunabhängigkeit, allerdings ist „Base Class Library“ nicht frei und muss dementsprechend von „go-mono“, „Portable.NET“ etc. reengineert werden. Verteilte Anwendungen (04/05) T.S. (JD) 5 Sprachintegration • Unterschiedliche Sprachen unterschiedliche Typsysteme DotNet: einheitliches Typsystem (CTS), um Integrationsschicht (XDR) zu vermeiden Einheitliche Aufrufkonventionen Alle zu verwendenden Sprachen werden an DotNet angepasst • Compiler erzeugen Bytecode (hier: MS Intermediate Language) ermöglicht Vererbung von Klassen anderer Sprachen sehr gut dekompilierbar! (daher neuer Markt: „Obfuscation Engines“) • Ausführung der Zwischensprache in Common Language Runtime (wie JRE) „managed Code“ Nutzung der Dienste der Laufzeitumgebung JIT-Kompilierung nur der jeweils benötigten Methoden! ( schnell!) • Nur noch durch VisualC++ Maschinen-Code erstellbar „unmanaged Code“ (Verwendung von RT-Diensten nicht möglich) Verteilte Anwendungen (04/05) T.S. (JD) 6 DotNet Sprachintegration Quellcode MSIL VB C# C++ Compiler Compiler Compiler Assembly Assembly Assembly CLR JIT Compiler Maschinencode Managed Code Managed CLR Code Managed Code Unmanaged Code CLR Dienste Betriebssystem Verteilte Anwendungen (04/05) T.S. (JD) 7 Methodenaufruf (JIT) Klasse A Methode 1 (ASM) Methode 2 (IL) (1 ) M etho d enau fruf Klasse B Methode 1 (ASM) Methode 3 (IL) Methode 2 (IL) Methode 4 (IL) JIT Compiler (2) IL-Code durch nativen Code ersetzen Nach Zimmermann /.NET/ Verteilte Anwendungen (04/05) T.S. (JD) 8 Common Type System • Einheitliches Typsystem für alle Sprachen • Einheitliche Repräsentation, Einheitliche Größe eines Datentyps Keine Konvertierung notwendig Keine externe Beschreibung Zwei unterschiedliche Typklassen (analog Java): a) Werttypen (value types) enthalten einen eigenen Wert Primitive Datentypen (analog: int, char etc.) Plus (zu Java): Stack-Typen (enum, struct) b) Referenztypen (reference types) Eigentliche Objekte (enthalten Referenz auf Objekt) Können Wert „null“ annehmen Komplexe Datentypen (analog: Integer, String etc.) Verteilte Anwendungen (04/05) T.S. (JD) 9 Objektmodell Object Value Type Enum Typen im Namensraum „System“ Type Boolean Byte Char Currency DateTime String Array Exception Decimal Double Guid Int16 Int32 Int64 SByte Single TimeSpan TypedRef. UInt16 UInt32 UInt64 Void Delegate reference types Verteilte Anwendungen (04/05) T.S. (JD) 10 Verteilte Anwendungen mit DotNet „Remoting“ • RPC/RMI-Mechanismus bei DotNet wird als „Remoting“* bezeichnet • „Remoting-Framework“ stellt übliche VA-Dienste bereit: • – – Activation – – – Zugriff auf Sockets („channels“*) Verteiltes Garbage Collection Etc. Lifecycle Services („lifetime support“*) Kommunikationsarten: – – Zwischen DotNet-Komponenten, ohne SOAP: Binäres Protokoll über TCP-Socket DotNet-Komponenten mit bel. anderen: SOAP über HTTP-Verbindung • Verbindungen zwischen Komponenten heißen bei DotNet „Channel“* • Stubs/Skeletons werden aufgeteilt in Proxy-Objekte und an „Channel“ gebundene „Formatter“* * Bei diesen Begriffen handelt es sich um M$Wortschöpfungen deren Gebrauch sicherlich bald Lizenrechtliche folgen haben wird. Verteilte Anwendungen (04/05) T.S. (JD) 11 3 Arten entfernter Objekte • Serveraktivierte Objekte/Well known-Objekte (.EXEs) – Single Call-Objekte • Ein Objekt pro Anfrage • atomare Anfragen • aka stateless session beans – Singleton Objekte • • • • • Mit Conversational State dauerhaft oder „Lease based Lifetime“ ( Lebensdauermanager) Sind einzigartig (singleton) existieren nur einmal pro VM Sinnvoll für komplexe Objekte, deren Instanziierung „teuer“ ist Ähnlich entity beans (ohne Persistenz, keine Lastverteilung) Beide: Anmeldung im BS bei Serverstart durch Server • Clientaktivierte Objekte (.DLLs) – Aktivierung bei vorliegendem Request – Generierung von clientseitigen Proxies aus „ObjRef“ – „Lease based Lifetime“ Verteilte Anwendungen (04/05) T.S. (JD) 12 Entfernte Zugriffe • Austausch von Daten innerhalb einer „Application Domain“: – Alle Objekte (reference types) „Passed by reference“ – Alle einfachen Datentypen (value types) „passed by value“ • Austausch über Grenzen der „Application Domain“ hinweg immer „by value“ Entfernt zugreifbare Objekte müssen das [serializable] Attribut tragen oder das Interface ISerializable implementieren • Lokale, nicht serialisierbare Objekte sind außerhalb der „Application Domain“ nicht zugreifbar und daher „nonremotable“* * Verteilte Anwendungen (04/05) T.S. (JD) Siehe vorhergehende Folie 13 Remote Objects • Abgeleitet von MarshalByRefObject – Übertragung eines Proxy-Objekts zum Client bei Request – Alle Aufrufe finden am Proxy-Objekt statt und sehen lokal aus – Proxy-Objekt marshallt / serialisiert Parameter und kommuniziert mit Peer • Abgeleitet von MarshalByValue – Übertragung einer vollständigen Kopie des Objektes und Nutzung auf Clientseite Verteilte Anwendungen (04/05) T.S. (JD) 14 Proxy Objekte Transparent Proxy vs. Real Proxy 1. Bei Aktivierung eines Remote Objects legt CLR auf Clientseite zunächst einen Transparent Proxy an, dessen Methoden Client aufruft 2. Bei Aufruf einer Methode des Remote Objekt am Transparent Proxy wird durch CLR überprüft, ob Remote Objekt lokal vorliegt oder entfernt ist a) Liegt Remote Objekt lokal vor werden simple lokale Methodenrufe durchgeführt d) Ist Remote Objekt entfernt werden 5) Parameter in ObjRef gemarshallt, 6) In IMessage-Objekt verpackt, 7) Ein RealProxy generiert, 8) An diesen das IMessage-Objekt übergeben und von diesem die Kommunikation übernommen • Beispiel: Die Bankanwendung Verteilte Anwendungen (04/05) T.S. (JD) 15 Transparent und Real Proxy Client Transparent Proxy Server Server Transparent Proxy lokal vorhanden? IMessage Real Proxy Real Proxy Verteilte Anwendungen (04/05) T.S. (JD) 16 Channel • Channel transportieren Messages – Setzen auf verschiedenen Schichten auf – Benötigen „Formatter“ fürs Kodieren der Nachrichten • unterschiedliche Arten: – HTTP-Channel • Transportieren SOAP-Nachrichten • für Kommunikation im Internet gedacht (SOAP, Port 80, Firewalls! ) • Nur Simplex oder Request-Response Paare, keine permanente Verbindung – TCP-Channel • • • • entsprechen permanenter Socket-Verbindung nur zwischen DotNet-Komponenten möglich schnelle Kommunikation für LAN-Bereich gedacht Verteilte Anwendungen (04/05) T.S. (JD) 17 Channel-Kommunikation Client Server Windows/Unix/Linux/ Großrechner mit WSDL .NET-Anwendungen SOAP Client .NET-Anwendungen Firewall HTTP HTTP SOAP RemotingObjekt Server TCP Binär Verteilte Anwendungen (04/05) RemotingObjekt T.S. (JD) 18 COM-Integration • Nutzung von COM-Komponenten durch .NET-Anwendungen über „Runtime Callable Wrapper“ (Wrapper für die COM-Komponente) • Nutzung von .NET-Komponenten durch COM-Anwendungen über „COM Callable Wrapper“ (Wrapper für die DotNet-Komponente) Client DCOM COMObjekt Verteilte Anwendungen (04/05) Client COMClient T.S. (JD) Server DCOM CCW RCW .NETClient Server 19 .NETRemoteobjekt Kommunikationsszenarien Client Nutzlast Server Protokoll .NET-Komponente .NET-Komponente SOAP/XML HTTP .NET-Komponente .NET-Komponente Binär (nur lokal!) TCP Verwaltet/nicht verwaltet .NET-Webdienst SOAP/XML HTTP .NET-Komponente Nicht verwaltete herkömmliche COMKomponente NDR (Network Data Representation, Netzwerkdatendarstellung) über RCW DCOM Nicht verwaltete herkömmliche COM-Komponente .NET-Komponente NDR über CCW DCOM Verteilte Anwendungen (04/05) T.S. (JD) 20 Beispiel: Die Bankanwendung • Remote Object „Bank“ – – Schlichte Implementierung einer veränderlichen Klassenvariablen Hat Methoden: einzahlen(double betrag), abheben(double betrag) und get_kontostand() • Hostinganwendung (Server) – Binden des Remote Objects an CLR – Bereitstellen der „Channels“ – Aktivierung des Remote Objects als Singleton • Client – Einfacher Zugriff auf Remote Object Keine Schnittstellendefinition (CTS...) Verteilte Anwendungen (04/05) T.S. (JD) 21 Das Remote Object: Die Bank using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; namespace BankBeispiel{ public class BankServer : MarshalByRefObject //von MarshalByRefObject ableiten { double kontostand; public BankServer(){ kontostand = 0.0; } public bool einzahlen (double betrag){ [...] } public bool abheben (double betrag){ [...] } public double get_kontostand(){ [...] } } } Verteilte Anwendungen (04/05) T.S. (JD) 22 Server using using using using System; System.Runtime.Remoting; System.Runtime.Remoting.Channels; System.Runtime.Remoting.Channels.Tcp; namespace BankBeispiel { public class Server { public static int Main(string [] args) { TcpChannel chan = new TcpChannel(8085); // Channel-Objekt erstellen und registrieren ChannelServices.RegisterChannel(chan); // Objekt registrieren (Port binden) RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType(„ BankBeispiel.BankServer,bank"), "Bank", WellKnownObjectMode.Singleton); System.Console.WriteLine("<ENTER> zum Beenden..."); System.Console.ReadLine(); return 0; } } } Verteilte Anwendungen (04/05) T.S. (JD) 23 Client using using using using System; System.Runtime.Remoting; System.Runtime.Remoting.Channels; System.Runtime.Remoting.Channels.Tcp; namespace BankBeispiel{ public class Client{ public static int Main(string [] args){ if (args.Length == 1){ TcpChannel chan = new TcpChannel(); // Channel-Objekt anlegen ChannelServices.RegisterChannel(chan); // Channel registrieren BankServer bank = (BankServer)Activator.GetObject(typeof(BankBeispiel. BankServer), "tcp://" + args[0] + ":8085/Bank"); // Remoteobjekt referenzieren bank.einzahlen (Convert.ToDouble(Console.ReadLine())); bank.abheben (Convert.ToDouble(Console.ReadLine())); Console.WriteLine ("Aktueller Kontostand: " + bank.get_kontostand()); } } } Verteilte Anwendungen (04/05) T.S. (JD) 24