Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

.NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05 Prof. Löhr, Karl Pauls.

Ähnliche Präsentationen


Präsentation zum Thema: ".NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05 Prof. Löhr, Karl Pauls."—  Präsentation transkript:

1 .NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05 Prof. Löhr, Karl Pauls

2 .NET als Komponenteninfrastruktur, B. Tsarev 2 Inhalt Was ist eine.NET Komponente? Architektur von.NET Framework.NET Assemblies Komponenten in.NET Enterprise Component Services in.NET

3 .NET als Komponenteninfrastruktur, B. Tsarev 3 Was ist eine Softwarekomponente? Eine Softwarekomponente* ist eine wiederverwendbare binäre Einheit zur Komposition von Anwendungen definiert Schnittstellen und stellt Dienste bereit kann allein installiert werden kann von Drittanbieter erstellt oder benutzt werden * [an Szyperski angelehnt]

4 .NET als Komponenteninfrastruktur, B. Tsarev 4 Aspekte der Granularität von Softwarekomponenten Eine Komponente bildet eine Einheit bezüglich: Abstraktion Kompilierung Auslieferung Installation Konfiguration Lokalisierung Laden

5 .NET als Komponenteninfrastruktur, B. Tsarev 5 Inkonsistente Nutzung des Begriffs „Komponente“ in.NET „To be a component, a class must implement the System.ComponentModel.IComponent interface and provide a basic constructor that requires no parameters or a single parameter of type IContainer.“ [MSDN Library] Komponente wird an einigen Stellen der Dokumentation als Synonym von.NET Assembly verwendet [.NET Framework SDK] „In this book, a component is a.NET class.“ [„.NET Components“ von Juwal Löwy] Sprachunabhängigkeit auf Klassenbasis bereits zur Entwicklungszeit! Component Services auf Basis der Klassen!

6 .NET als Komponenteninfrastruktur, B. Tsarev 6 Was ist eine.NET Komponente? Eine Definition, die der allgemeinen Definition zur Softwarekomponente gerecht ist: „Jede.NET Assembly ist eine Komponente, sofern sie öffentliche Klassen bereitstellt.“ [www.it-visions.de – Dr. Schwichtenberg] Assembly Öffentliche Klasse1 Interne Klasse3 Interne Klasse4 Öffentliche Klasse2

7 .NET als Komponenteninfrastruktur, B. Tsarev 7 Architektur von.NET Framework.NET Programmiersprachen Ein gemeinsames Typsystem für alle.NET Sprachen Umfangreiche Klassen-Bibliothek Laufzeitumgebung

8 .NET als Komponenteninfrastruktur, B. Tsarev 8 Common Language Infrastructure - CLI C# VB.NET C++ J#... Compiler C# Compiler VB.NET Compiler C++ Intermediate Language + Metadata Loader.NET Assembly IL JIT-Compiler Execution CLI ist ECMA und ISO-Standard! Virtual Execution System

9 .NET als Komponenteninfrastruktur, B. Tsarev 9 Common Language Runtime (CLR) CLR ist die Microsoft Implementierung von CLI Laufzeitumgebung zur Ausführung von Managed Code Laden von.NET Assemblies/Modulen Auflösung von Verweisen auf Assemblies Sicherheits- und Versionsüberprüfungen Speicherverwaltung Übersetzung in native code und Ausführung Fehlerbehandlung

10 .NET als Komponenteninfrastruktur, B. Tsarev 10 Class2 Method1 (IL) Method2 (IL) JIT-Übersetzung Class Loader Class2 Method1 (native) Method2 (IL)Stub compile Stub insert stubs load Class1 Method1 (native) call JIT-Compiler call

11 .NET als Komponenteninfrastruktur, B. Tsarev 11 Interoperabilität mit.NET Interoperabilität zwischen verschiedenen.NET Programmiersprachen Gemeinsames Typsystem (Common Type System) Gemeinsame „Zwischensprache“ (Common Intermediate Language) Richtlinien bei der Übersetzung in IL (Common Language Specification) Mächtige Klassenbibliothek, die allen Programmier- sprachen zur Verfügung steht

12 .NET als Komponenteninfrastruktur, B. Tsarev 12 Interoperabilität mit.NET - Beispiel

13 .NET als Komponenteninfrastruktur, B. Tsarev 13 Plattformunabhängigkeit mit.NET Laufzeitumgebung für die jeweilige Plattform (Windows - CLR, FreeBSD und Mac OS X – Rotor, Linux - Mono).NET Compact Framework für mobile Geräte Standardisierter „Satz von Instruktionen“ für die „Zwischensprache“

14 .NET als Komponenteninfrastruktur, B. Tsarev 14 Assemblies – Übersicht Was ist eine Assembly? Aufbau einer Assembly Erstellung von Assemblies Installation von Assemblies

15 .NET als Komponenteninfrastruktur, B. Tsarev 15 Was sind Assemblies? Assemblies sind die Bestandteile einer.NET Anwendung Eine Assembly ist die kleinste Einheit bezüglich Installation Versionierung Sicherheitsaspekte Ausführung bzw. Einbindung Assemblies sind logische Gebilden Können aus mehreren Dateien bestehen Die Beziehung der Dateien in einer Assembly ist auf Dateiebene nicht ersichtlich selbst-beschreibend – keine Zusatzinformation nötig, um die Assembly zu starten oder nutzen

16 .NET als Komponenteninfrastruktur, B. Tsarev 16 Arten von Assemblies (1) Statische Assembly liegt physisch als Datei(en) vor Dynamische Assembly wird dynamisch mittels Reflektion erstellt Klasse System.Reflection.Assembly „Ausführbare“ Assembly (.EXE) – Out-process Assembly kann direkt gestartet werden hat einen Einstiegspunkt – statische Main-Methode Klassen-Bibliothek (.DLL) – In-process Assembly kann nur in der Umgebung einer „ausführbaren“ Assembly genutzt werden

17 .NET als Komponenteninfrastruktur, B. Tsarev 17 Arten von Assemblies (2) Einzeldatei Assembly besteht aus genau einer Datei Mehrdatei Assembly ist auf mehreren Dateien verteilt Private Assembly liegt im Verzeichnis oder einem Unterverzeichnis der.NET Anwendung, von der sie genutzt wird kann von anderen Assemblies außerhalb des Verzeichnisses nicht genutzt werden Shared Assembly – öffentliche Assemby wird auf dem Zielsystem an einem allen bekannten Ort installiert – Global Assembly Cache (GAC) kann von allen genutzt werden

18 .NET als Komponenteninfrastruktur, B. Tsarev 18 Aufbau einer Assembly Assemblies bestehen aus Ein oder mehreren.NET-Modulen Ressourcen-Dateien (Bilder, Textdateien, usw.) Assembly-Manifest (verpflichtend) Diese Bestandteile können beliebig auf Dateien verteilt werden bzw. mehrere Bestandteile in einer Datei integriert werden Die Dateien einer Assembly müssen auf dem Zielsystem im gleichen Ordner liegen

19 .NET als Komponenteninfrastruktur, B. Tsarev 19.NET Module – „managed module“ Ein.NET Modul ist die kleinste kompilierbare Einheit Ein.NET Modul enthält Definition von Typen und deren Implementierung übersetzt in IL Metadata – Beschreibung der enthaltenen Typen und ihre sichtbare Elemente, sowie globale Definitionen (Aufzählungen, Delegate) IL-Code Metadata.NET Module

20 .NET als Komponenteninfrastruktur, B. Tsarev 20 Verteilung von Assemblies auf Dateien IL-Code Metadata.DLL oder.EXE Manifest Einzeldatei-Assembly Resources Mehrdatei-Assembly.DLL oder.EXE Manifest Resources IL-Code Metadata.netmodule IL-Code Metadata.DLL oder.EXE Manifest Ressourcen IL-Code Metadata.netmodule Resources IL-Code Metadata.netmodule Mehrdatei-Assembly

21 .NET als Komponenteninfrastruktur, B. Tsarev 21 Warum Mehrdatei-Assemblies? Rücksicht auf kleine mobile Geräten und Internet Anwendungen CLR lädt einen.NET Modul oder Ressourcen-Datei, nur wenn sie gebraucht wird Wenn diese in der Assembly-Datei eingebettet sind, werden sie mitgeladen Bei einer direkt vom Internet gestarteten.NET Anwendung schließt „laden“ auch „herunterladen“ ein!..., aber aufwendigere Administration

22 .NET als Komponenteninfrastruktur, B. Tsarev 22 Assembly-Manifest Assembly-Identität Assembly-Name Version Culture-Information Öffentlicher Schlüssel des Erstellers Liste aller Dateien, aus der die Assembly besteht Typ-Information – wo sich von außen referenzierbaren Typen befinden Liste aller statisch referenzierten Assemblies Weitere Assembly-Attributen wie z.B. Product, Company usw.

23 .NET als Komponenteninfrastruktur, B. Tsarev 23 createAccount (AccountNum:string) BankServer Erstellung von Assemblies Beispiel „Banking“ – Klassendiagramm deleteAccount (AccountNum:string) checkAccountBalance (AccountNum: string) : double payoutAccount (AccountNum:string, Amount:double) payinAccount (AccountNum:string, Amount:double) BankClient readonly AccountNum : string Account AccountBalance : double takeMoney (Amount : double) putMoney (Amount : double) 1* static Main() Demo Quellcode

24 .NET als Komponenteninfrastruktur, B. Tsarev 24 Erstellung von Einzeldatei-Assemblies Visual Studio.NET erzeugt beim Kompilieren eines Projekts standardmäßig Einzeldatei-Assemblies Console-Tools C# Compiler – csc.exe VB.NET Compiler – vbc.exe Assembly Linker – AL.exe Erstellung einer Klassen-Bibliothek (.DLL) > csc /target:library Bank.cs -> Bank.dll Erstellung einer „ausführbarer“ Assembly (.EXE) > csc /target:exe /r:Bank.dll BankClient.cs -> BankClient.exe

25 .NET als Komponenteninfrastruktur, B. Tsarev 25 Erstellung von Mehrdatei-Assemblies Erstellung einer Mehrdatei-Assembly Quellcode als.NET Module kompilieren > csc /target:module Account.cs -> Account.netmodule An einem wichtigen.NET Modul das Assembly-Manifest anhängen > csc /target:library /addmodule:Account.netmodule Bank.cs -> Bank.dll Alternativ das Assembly-Manifest getrennt erstellen > csc /target:module /addmodule:Account.netmodule Bank.cs-> Bank.netmodule > al /out:Bank.dll /t:library Account.netmodule Bank.netmodule -> Bank.dll

26 .NET als Komponenteninfrastruktur, B. Tsarev 26 Ressourcen in Assemblies Während der Kompilierung > csc /resource:Menu.txt /r:Bank.dll BankClient.cs -> Die Datei Menu.txt wird in BankClient.exe eingebettet > csc /linkresource:Menu.txt /r:Bank.dll BankClient.cs -> Die Datei Menu.txt wird nur verlinkt Nutzung von Ressourcen im Code Assembly a = Assembly.GetExecutingAssembly(); Stream strm = a.GetManifestResourceStream (“Menu.txt”); StreamReader sr = new StreamReader(strm); string s = sr.ReadToEnd(); sr.Close();

27 .NET als Komponenteninfrastruktur, B. Tsarev 27 Assemblies-Inhalt anzeigen lassen IL Disassembler - ILDASM.exe Zeigt das Assembly-Manifest, den Aufbau, die enthaltenen Typen und deren Implementierung in IL an.NET Component Inspector Startet die Assembly und erkundet sie mittels Reflection

28 .NET als Komponenteninfrastruktur, B. Tsarev 28 Installation von privaten Assemblies Private Assemblies werden von einer Anwendung benutzt Eindeutige Bindung über Assembly-Name Installation erfolgt durch Kopieren Keine Einträge in der Registry nötig! Installationsort von privaten Assemblies Selbes Verzeichnis wie Anwendung Unterverzeichnis mit Namen der Assembly Unterverzeichnis angegeben als Suchpfad in der Konfigurationsdatei der Anwendung Anwendung.exe.config

29 .NET als Komponenteninfrastruktur, B. Tsarev 29 Installation von öffentlichen Assemblies Öffentliche Assemblies können von allen.NET Anwendungen genutzt werden Eindeutige Bindung über Strong-Name Sie werden in Global Assembly Cache (GAC) installiert Erfordert Toolunterstützung Durch Installer auf dem Zielsystem Gacutil.exe für Entwickler In GAC können ohne Probleme unterschiedliche Versionen einer Assembly installiert werden - No more DLL-Hell! Side-by-Side Execution – CLR kann parallel mehrere Versionen einer Assembly laden

30 .NET als Komponenteninfrastruktur, B. Tsarev 30 Global Assembly Cache Zentraler Speicherort aller öffentlichen Assemblies Vorübersetzte Assemblies für die aktuelle Plattform werden in NativeImages_.. abgelegt CLR prüft zuerst in NativeImages Vorübersetzung mit Ngen.exe (Native Image Generator)

31 .NET als Komponenteninfrastruktur, B. Tsarev 31 Strong Names öffentlicher Assemblies Öffentliche Assemblies werden durch ihren Strong Names eindeutig identifiziert und referenziert Bestandteile von einen Strong Name Name der Assembly Öffentlicher Schlüssel des Herstellers Culture (Sprache-Land) z.B. en-US, de-AT Version:... Beispiel:

32 .NET als Komponenteninfrastruktur, B. Tsarev 32 Digitale Signierung von Assemblies Öffentliche Assemblies werden digital signiert CLR überprüft die Echtheit der Assemblies

33 .NET als Komponenteninfrastruktur, B. Tsarev 33 Erstellung von öffentlichen Assemblies Generierung von einem Schlüsselpaar > sn -k MyCompany.keys Auf die Schlüsseldatei bei der Kompilierung hinweisen [assembly:AssemblyKeyFile("MyCompany.keys")] oder al.exe /keyfile:MyCompany.keys > csc /t:library Bank.cs -> Bank.dll ist signiert und kann in GAC installiert werden Installation in GAC mit gacutil.exe > gacutil /i Bank.dll

34 .NET als Komponenteninfrastruktur, B. Tsarev 34 Versionskontrolle (1) Private Assemblies im Programmverzeichnis der.NET Anwendung, die sie nutzt Für jede.NET Anwendung kann man die genau passende Version einer privaten Assembly haben Bei öffentlichen Assemblies ist die Version ein Teil der Identität der Assembly CLR sucht standardmäßig die genaue Version

35 .NET als Komponenteninfrastruktur, B. Tsarev 35 Versionskontrolle (2) In GAC können mehrere Versionen einer Assembly installiert werden Side-by-Side Execution Mehrere Versionen einer Assembly können gleichzeitig laufen, ohne sich gegenseitig zu stören Abwärtskompatibilität nicht unbedingt nötig Vermeidung von „DLL-Hell“ „Unmanaged“ DLLs können nur in einer Version im System vorliegen Bei Update einer DLL, können u.U. Applikation, die die alte Version genutzt hatten, nicht mehr lauffähig sein

36 .NET als Komponenteninfrastruktur, B. Tsarev 36 Versionskontrolle - Konfiguration In der Konfigurations-Datei Anwendung.exe.config können Verweise auf Assemblies zu neuen Versionen umgeleitet werden Die Datei kann vom Anbieter der.NET Anwendung mitgeliefert werden BankClient.exe.config

37 .NET als Komponenteninfrastruktur, B. Tsarev 37 Konfiguration von CLR und Assemblies Die Konfiguration von CLR basiert auf XML- Konfigurationsdateien Pfad [Windows]\Microsoft.NET\Framework\ Versionsnummer\CONFIG  Machine.config  Security.config  und weitere Im Verzeichnis der jeweiligen.NET Anwendung  Anwendung.exe.config  Web.config für ASP.NET Anwendungen Visuelles Konfigurationstool Control Panel -> Administrative Tools -> ->.NET Configuration 1.1

38 .NET als Komponenteninfrastruktur, B. Tsarev 38.NET als Komponenteninfrastruktur Eine Komponenteninfrastruktur besteht aus APIs, Entwicklungsumgebung, Laufzeitumgebung und Administrationtools zu Entwicklung, Erstellung, Installation, Administration und Ausführung von Komponenten Visual Studio.NET CLR.NET Configuration ?.NET Framework Class Library

39 .NET als Komponenteninfrastruktur, B. Tsarev 39 Komponentenmodell von.NET Framework Namespace System.ComponentModel Basis-Schnittstellen: IComponent, IContainer Basis-Klassen: Component, Container Eine Komponente ist eine Klasse, die die Schnittstelle System.ComponentModel.IComponent implementiert oder eine Implementierung davon erbt.NET Framework bietet automatisch visuelle design-time Unterstützung von allen Typen, die IComponent implementieren Drag-and-drop auf ein Formular Einstellung können direkt in Properties-Window angegeben werden Der entsprechende Quellcode wird generiert

40 .NET als Komponenteninfrastruktur, B. Tsarev 40 Design-Time Attribute Durch Attribute im Quellcode kann das Verhalten des Designers beeinflusst werden Beispiel Category- und Description-Attribute [Category("Appearance")] public Color BorderColor; [Description("The Click event of the button")] public event EventHandler Click; Andere Attribute  Browsable  DefaultProperty  DefaultValue  usw.

41 .NET als Komponenteninfrastruktur, B. Tsarev 41 Class vs. Component vs. Control Empfehlungen bei der Entwicklung von Komponenten [MSDN/Library] Situation (Eine Klasse, die...)Empfehlung externe Ressourcen (Datenbanken etc.) nutztimplementiere IDisposable durch visuellen Designer manipulierbarimplementiere System.ComponentModel. IComponent durch visuellen Designer manipulierbar fernaufrufbar per Referenz (MarshalByReference) erbe von System.ComponentModel. Component durch visuellen Designer manipulierbar fernaufrufbar durch Kopieren (MarshalByValue) erbe von System.ComponentModel. MarshalByValueComponent durch visuellen Designer manipulierbar visuelle Oberfläche bietet erbe von System.Windows.Forms.Control oder System.Web.UI.Control

42 .NET als Komponenteninfrastruktur, B. Tsarev 42 Komponenten in.NET Komponenten, die IComponent implementieren Controls Komponenten mit GUI auf einer Windows Form ASP.NET Server Controls Serverseitige Komponenten mit UI auf einer Web Form – durch HTML auf der Clientseite repräsentiert Serviced Components COM+ Komponenten

43 .NET als Komponenteninfrastruktur, B. Tsarev 43 MyTimer eigene Implementierung eines Timers als Komponente erbt von Component bietet keine visuelle Oberfläche InfoUserControl erbt von System.Windows.Forms.UserControl  Basisklasse für eigene Controls  hat visuelle Oberfläche  kann als Container für andere Controls dienen  Focusmanagement, Positionsmanagement, Keyboard handling Beispiel: InfoUserControl und MyTimer Demo!

44 .NET als Komponenteninfrastruktur, B. Tsarev 44 ASP.NET Server Controls ASP.NET Web Form Container für ASP.NET Server Controls wird zu einer Klasse kompiliert und auf der Server ausgeführt das Ergebnis ist die dynamische Erstellung einer HTML-Seite, die an den Client verschickt wird ASP.NET Server Controls können auf Web Forms positioniert werden werden durch HTML und Javascript browserspezifisch auf der Clientseite repräsentiert wiederverwendbar ASP.NET Control Gallery - http://www.asp.net/controlgallery/ Demo!

45 .NET als Komponenteninfrastruktur, B. Tsarev 45 Serviced Components „Serviced Components“ sind Komponenten, die „.NET Enterprise Services“ nutzen „.NET Enterprise Services“ werden durch COM+ realisiert COM+ ist das Ergebnis von Integration von COM und MTS (Microsoft Transaction Server) COM+ ist standard Bestandteil von Windows 2000 und höher Die.NET Assembly, die die „serviced“ Komponente enthält, wird als Teil einer COM+ Anwendung registriert

46 .NET als Komponenteninfrastruktur, B. Tsarev 46.NET Enterprise Services Instance management Objektpooling JITA (Just in-time Activation) automatisch Fernaufrufe Transaktionen Queued components Web Services... und weitere

47 .NET als Komponenteninfrastruktur, B. Tsarev 47 Programmierung von „serviced“ Komponenten „Serviced“ Komponenten erben von System.EnterpriseServices.ServicedComponent keine statische Methoden und Variablen keine parametriesierte Konstruktoren Konfigurierung der Dienste Deployment-spezifische Dienste durch COM+ Explorer Nicht deployment-spezifische durch Attribute im Quellcode (einige davon durch COM+ Explorer veränderbar)

48 .NET als Komponenteninfrastruktur, B. Tsarev 48 Programmierung von „serviced“ Komponenten Am Beispiel des Bank-Servers using System.EnterpriseServices; [assembly: ApplicationName("Bank")] [assembly: ApplicationActivation(ActivationOption.Server)]... [ObjectPooling(MinPoolSize = 1, MaxPoolSize = 1, CreationTimeout = 60000)] [JustInTimeActivation(true)] public class BankServer : ServicedComponent { protected override bool CanBePooled(){ return true; }... [AutoComplete(true)] public void createAccount(string strAccountNum) {... }... }

49 .NET als Komponenteninfrastruktur, B. Tsarev 49 Administration von „serviced“ Komponenten Erstellung  csc /t:library Bank.cs  gacutil /i Bank.dll  csc /t:exe /r:Bank.dll BankClient.cs Registrierung  regsvsc Bank.dll Konfiguration durch COM+ Explorer [Control Panel]/[Administrative Tools]/[Component Services] Demo!

50 .NET als Komponenteninfrastruktur, B. Tsarev 50 Zusammenfassung.NET als Komponenteninfrastruktur Programmierspracheninteroperabilität Plattformunabhängigkeit Aufteilung größerer Anwendung in Assemblies Versionskontrolle, Side-by-Side Execution Flexible Konfigurationsmöglichkeiten von CLR Umfangreiche „Framework Class Library“ Design-time Unterstützung von Komponenten durch.NET Framework – IComponent Komponenten mit UI (Controls)  Controls auf Windows Forms  Server Controls auf Web Forms (ASP.NET) „Serviced“ Komponenten und.NET Enterprise Services

51 .NET als Komponenteninfrastruktur, B. Tsarev 51 Quellen (1) J. Löwy, Programming.NET Components, O‘Reilly, 2003 A. Kühnel, Visual C#, Galileo Computing, 2003 http://www.components-online.com (03.01.2005) http://www.sdmagazine.com (03.01.2005) http://www.msdn.microsoft.com/library/ (09.01.2005) Henrik Zellmer,.NET Versioning and Deployment, DISCOURSE Verteile Systeme mit.NET, 2003, http://kbs.cs.tu- berlin.de/~mwerner/ discourse/documents /BlockLV03/zellmer- deploy.pdf (09.01.2005) J. Heinzelreiter,.Net Assemblies, 2002, http://webster.fh- hagenberg.at/staff/jheinzel/PRG6/Docs/Assemblies.pdf (09.01.2005)

52 .NET als Komponenteninfrastruktur, B. Tsarev 52 Quellen (2) J. Heinzelreiter,.Net Architektur, 2002, http://webster.fh- hagenberg.at/staff/jheinzel/PRG6/Docs/DotNet-Architektur.pdf (09.01.2005) J. Löwy, COM and.NET Component Services, O‘Reilly, 2001 J. Löwy,.NET Enterprise Services, www.dotned.nl/ downloads/juvallowy.pdf, (16.01.2005) Mary Kirtland (Microsoft), COM+ Internals, http://se2c.uni.lu/tiki/se2c_bib_download.php?id=523 (16.01.2005)

53 .NET als Komponenteninfrastruktur, B. Tsarev 53 Danke für die Aufmerksamkeit!


Herunterladen ppt ".NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05 Prof. Löhr, Karl Pauls."

Ähnliche Präsentationen


Google-Anzeigen