1 / 53

.NET als Komponenteninfrastruktur

.NET als Komponenteninfrastruktur. Vortragender :. Boris Tsarev. Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05 Prof. Löhr, Karl Pauls. Inhalt. Was ist eine .NET Komponente? Architektur von .NET Framework .NET Assemblies Komponenten in .NET

kimi
Download Presentation

.NET als Komponenteninfrastruktur

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Inhalt • Was ist eine .NET Komponente? • Architektur von .NET Framework • .NET Assemblies • Komponenten in .NET • Enterprise Component Services in .NET .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] .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 .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! .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 Öffentliche Klasse2 Interne Klasse3 Interne Klasse4 .NET als Komponenteninfrastruktur, B. Tsarev

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

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

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

  12. Interoperabilität mit .NET - Beispiel .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“ .NET als Komponenteninfrastruktur, B. Tsarev

  14. Assemblies – Übersicht • Was ist eine Assembly? • Aufbau einer Assembly • Erstellung von Assemblies • Installation von Assemblies .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 .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 .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 .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 .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) .NET Module IL-Code Metadata .NET als Komponenteninfrastruktur, B. Tsarev

  20. .DLL oder .EXE Manifest .netmodule .netmodule IL-Code IL-Code IL-Code Metadata Metadata Metadata .netmodule Ressourcen IL-Code Metadata Resources Verteilung von Assemblies auf Dateien Einzeldatei-Assembly Mehrdatei-Assembly Mehrdatei-Assembly .DLL oder .EXE .DLL oder .EXE Manifest Manifest IL-Code Metadata Resources Resources .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 .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. .NET als Komponenteninfrastruktur, B. Tsarev

  23. Erstellung von AssembliesBeispiel „Banking“ – Klassendiagramm 1 * BankServer Account createAccount (AccountNum:string) readonly AccountNum : string deleteAccount (AccountNum:string) AccountBalance : double checkAccountBalance (AccountNum: string) : double takeMoney (Amount : double) putMoney (Amount : double) payoutAccount (AccountNum:string, Amount:double) payinAccount (AccountNum:string, Amount:double) Demo Quellcode BankClient static Main() .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 .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 .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(); .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 .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 .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 .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) .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: <Major>.<Minor>.<Build>.<Revision> • Beispiel: .NET als Komponenteninfrastruktur, B. Tsarev

  32. Digitale Signierung von Assemblies • Öffentliche Assemblies werden digital signiert • CLR überprüft die Echtheit der Assemblies .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 .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 .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 .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 <?xml version="1.0"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Bank" publicKeyToken="dc759fdd93618f15" /> <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="2.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> .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 .NET als Komponenteninfrastruktur, B. Tsarev

  38. ? .NET Framework Class Library Visual Studio .NET CLR .NET Configuration .NET als Komponenteninfrastruktur • Eine Komponenteninfrastruktur besteht aus • APIs, • Entwicklungsumgebung, • Laufzeitumgebung • und Administrationtools • zu Entwicklung, Erstellung, Installation, Administration und Ausführung von Komponenten .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 .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. .NET als Komponenteninfrastruktur, B. Tsarev

  41. Class vs. Component vs. Control • Empfehlungen bei der Entwicklung von Komponenten [MSDN/Library] .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 .NET als Komponenteninfrastruktur, B. Tsarev

  43. Beispiel: InfoUserControl und MyTimer • 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 Demo! .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! .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 .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 .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) .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) { ... } ... } .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! .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 .NET als Komponenteninfrastruktur, B. Tsarev

More Related