Title: .NET als Komponenteninfrastruktur
1.NET als Komponenteninfrastruktur
Vortragender
Boris Tsarev
Seminar Komponentenbasierte Software-Entwicklung
WS 04/05 Prof. Löhr, Karl Pauls
2Inhalt
- Was ist eine .NET Komponente?
- Architektur von .NET Framework
- .NET Assemblies
- Komponenten in .NET
- Enterprise Component Services in .NET
3Was 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
4Aspekte der Granularität von Softwarekomponenten
- Eine Komponente bildet eine Einheit bezüglich
- Abstraktion
- Kompilierung
- Auslieferung
- Installation
- Konfiguration
- Lokalisierung
- Laden
5Inkonsistente 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!
6Was 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
7Architektur von .NET Framework
.NET Programmiersprachen
Ein gemeinsames Typsystem für alle .NET Sprachen
Umfangreiche Klassen-Bibliothek
Laufzeitumgebung
8Common Language Infrastructure - CLI
.NET Assembly
C
Compiler C
Intermediate Language Metadata
VB.NET
Compiler VB.NET
Loader
C
Compiler C
...
IL JIT-Compiler
J
Compiler C
Execution
Virtual Execution System
CLI ist ECMA und ISO-Standard!
9Common 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
10JIT-Übersetzung
Class Loader
Class Loader
load
11Interoperabilitä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
12Interoperabilität mit .NET - Beispiel
13Plattformunabhä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
14Assemblies Übersicht
- Was ist eine Assembly?
- Aufbau einer Assembly
- Erstellung von Assemblies
- Installation von Assemblies
15Was 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
16Arten 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
17Arten 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
18Aufbau 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 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
20Verteilung von Assemblies auf Dateien
Einzeldatei-Assembly
Mehrdatei-Assembly
Mehrdatei-Assembly
.DLL oder .EXE
.DLL oder .EXE
Manifest
Manifest
IL-Code
Metadata
Resources
Resources
21Warum 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
22Assembly-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.
23Erstellung von AssembliesBeispiel Banking
Klassendiagramm
1
BankServer
Account
createAccount (AccountNumstring)
readonly AccountNum string
deleteAccount (AccountNumstring)
AccountBalance double
checkAccountBalance (AccountNum string) double
takeMoney (Amount double)
putMoney (Amount double)
payoutAccount (AccountNumstring, Amountdouble)
payinAccount (AccountNumstring, Amountdouble)
Demo Quellcode
BankClient
static Main()
24Erstellung 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)
- gt csc /targetlibrary Bank.cs
- -gt Bank.dll
- Erstellung einer ausführbarer Assembly (.EXE)
- gt csc /targetexe /rBank.dll BankClient.cs
- -gt BankClient.exe
25Erstellung von Mehrdatei-Assemblies
- Erstellung einer Mehrdatei-Assembly
- Quellcode als .NET Module kompilieren
- gt csc /targetmodule Account.cs -gt
Account.netmodule - An einem wichtigen .NET Modul das
Assembly-Manifest anhängen - gt csc /targetlibrary /addmoduleAccount.netmodul
e Bank.cs -gt Bank.dll - Alternativ das Assembly-Manifest getrennt
erstellen - gt csc /targetmodule /addmoduleAccount.netmodule
Bank.cs -gt Bank.netmodule - gt al /outBank.dll /tlibrary Account.netmodule
Bank.netmodule -gt Bank.dll
26Ressourcen in Assemblies
- Während der Kompilierung
- gt csc /resourceMenu.txt /rBank.dll
BankClient.cs - -gt Die Datei Menu.txt wird in BankClient.exe
eingebettet - gt csc /linkresourceMenu.txt /rBank.dll
BankClient.cs - -gt 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()
27Assemblies-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
28Installation 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
29Installation 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
30Global 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)
31Strong 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 ltMajorgt.ltMinorgt.ltBuildgt.ltRevisiongt
- Beispiel
32Digitale Signierung von Assemblies
- Öffentliche Assemblies werden digital signiert
- CLR überprüft die Echtheit der Assemblies
33Erstellung von öffentlichen Assemblies
- Generierung von einem Schlüsselpaar
- gt sn -k MyCompany.keys
- Auf die Schlüsseldatei bei der Kompilierung
hinweisen - assemblyAssemblyKeyFile("MyCompany.keys")
- oder al.exe /keyfileMyCompany.keys
- gt csc /tlibrary Bank.cs
- -gt Bank.dll ist signiert und kann in GAC
installiert werden - Installation in GAC mit gacutil.exe
- gt gacutil /i Bank.dll
34Versionskontrolle (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
35Versionskontrolle (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
36Versionskontrolle - 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
- lt?xml version"1.0"?gt
- ltconfigurationgt
- ltruntimegt
- ltassemblyBinding xmlns"urnschemas-microsoft-
comasm.v1"gt - ltdependentAssemblygt
- ltassemblyIdentity name"Bank"
publicKeyToken"dc759fdd93618f15" /gt - ltbindingRedirect oldVersion"1.0.0.0-1.1.0
.0" newVersion"2.0.0.0" /gt - lt/dependentAssemblygt
- lt/assemblyBindinggt
- lt/runtimegt
- lt/configurationgt
37Konfiguration 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 -gt Administrative Tools -gt
- -gt .NET Configuration 1.1
38.NET als Komponenteninfrastruktur
- Eine Komponenteninfrastruktur besteht aus
- APIs,
- Entwicklungsumgebung,
- Laufzeitumgebung
- und Administrationtools
- zu Entwicklung, Erstellung, Installation,
Administration und Ausführung von Komponenten
39Komponentenmodell 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
40Design-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.
41Class vs. Component vs. Control
- Empfehlungen bei der Entwicklung von Komponenten
MSDN/Library
Situation (Eine Klasse, die ...) Empfehlung
externe Ressourcen (Datenbanken etc.) nutzt implementiere IDisposable
durch visuellen Designer manipulierbar implementiere 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
42Komponenten 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
43Beispiel 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!
44ASP.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/contr
olgallery/
Demo!
45Serviced 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 Enterprise Services
- Instance management
- Objektpooling
- JITA (Just in-time Activation)
- automatisch Fernaufrufe
- Transaktionen
- Queued components
- Web Services
- ... und weitere
47Programmierung 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)
48Programmierung 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)
... - ...
49Administration von serviced Komponenten
- Erstellung
- csc /tlibrary Bank.cs
- gacutil /i Bank.dll
- csc /texe /rBank.dll BankClient.cs
- Registrierung
- regsvsc Bank.dll
- Konfiguration durch COM Explorer
- Control Panel/Administrative Tools/Component
Services
Demo!
50Zusammenfassung
- .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
51Quellen (1)
- J. Löwy, Programming .NET Components, OReilly,
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)
52Quellen (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,
OReilly, 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?id5
23 (16.01.2005)
53- Danke für die Aufmerksamkeit!