.NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte...

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

Transcript of .NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte...

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

.NET als Komponenteninfrastruktur

Vortragender: Boris Tsarev

Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05Prof. Löhr, Karl Pauls

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

.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

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

.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]

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

.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

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

.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!

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

.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 Klasse3Interne Klasse4

Öffentliche Klasse2

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

.NET als Komponenteninfrastruktur, B. Tsarev 7

Architektur von .NET Framework.NET Programmiersprachen

Ein gemeinsames Typsystem für alle .NET SprachenUmfangreiche Klassen-Bibliothek

Laufzeitumgebung

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

.NET als Komponenteninfrastruktur, B. Tsarev 8

Common Language Infrastructure - CLI

C#

VB.NET

C++

J#

...

Compiler C#

Compiler VB.NET

Compiler C++

Compiler C++

Intermediate Language+ Metadata

Loader

.NET Assembly

IL JIT-Compiler

Execution

CLI ist ECMA und ISO-Standard!

Virtual Execution System

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

.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

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

.NET als Komponenteninfrastruktur, B. Tsarev 10

Class2Method1 (IL)

Method2 (IL)

JIT-ÜbersetzungClass LoaderClass Loader

Class2Method1 (native)

Method2 (IL)Stub

compile

Stub

Stub

insert stubs load

Class1Method1 (native) call

JIT-Compiler

call

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

.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

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

.NET als Komponenteninfrastruktur, B. Tsarev 12

Interoperabilität mit .NET - Beispiel

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

.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“

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

.NET als Komponenteninfrastruktur, B. Tsarev 14

Assemblies – Übersicht• Was ist eine Assembly?• Aufbau einer Assembly• Erstellung von Assemblies• Installation von Assemblies

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

.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

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

.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

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

.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

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

.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

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

.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

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

.NET als Komponenteninfrastruktur, B. Tsarev 20

Verteilung von Assemblies auf Dateien

IL-Code

Metadata

.DLL oder .EXEManifest

Einzeldatei-Assembly

Resources

Mehrdatei-Assembly

.DLL oder .EXEManifest

Resources

IL-Code

Metadata

.netmoduleIL-Code

Metadata

.DLL oder .EXEManifest

RessourcenIL-Code

Metadata

.netmodule

Resources

IL-Code

Metadata

.netmodule

Mehrdatei-Assembly

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

.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

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

.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.

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

.NET als Komponenteninfrastruktur, B. Tsarev 23

createAccount (AccountNum:string)

BankServer

Erstellung von AssembliesBeispiel „Banking“ – Klassendiagramm

deleteAccount (AccountNum:string)checkAccountBalance (AccountNum: string) : doublepayoutAccount (AccountNum:string, Amount:double)payinAccount (AccountNum:string, Amount:double)

BankClient

readonly AccountNum : stringAccount

AccountBalance : double

takeMoney (Amount : double)

putMoney (Amount : double)

1 *

static Main()

Demo Quellcode

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

.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

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

.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

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

.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 CodeAssembly a = Assembly.GetExecutingAssembly();Stream strm = a.GetManifestResourceStream (“Menu.txt”);StreamReader sr = new StreamReader(strm);string s = sr.ReadToEnd();sr.Close();

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

.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

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

.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

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

.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

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

.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)

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

.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:

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

.NET als Komponenteninfrastruktur, B. Tsarev 32

Digitale Signierung von Assemblies• Öffentliche Assemblies werden digital signiert• CLR überprüft die Echtheit der Assemblies

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

.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

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

.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

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

.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

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

.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>

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

.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

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

.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 .NETCLR

.NET Configuration

?.NET Framework Class Library

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

.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

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

.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.

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

.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.) nutzt

implementiere IDisposable

durch visuellen Designer manipulierbar implementiere System.ComponentModel. IComponent

durch visuellen Designer manipulierbarfernaufrufbar per Referenz (MarshalByReference)

erbe von System.ComponentModel. Component

durch visuellen Designer manipulierbarfernaufrufbar durch Kopieren (MarshalByValue)

erbe von System.ComponentModel. MarshalByValueComponent

durch visuellen Designer manipulierbarvisuelle Oberfläche bietet

erbe von System.Windows.Forms.Controloder System.Web.UI.Control

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

.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

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

.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!

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

.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!

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

.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

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

.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

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

.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)

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

.NET als Komponenteninfrastruktur, B. Tsarev 48

Programmierung von „serviced“ Komponenten• Am Beispiel des Bank-Serversusing 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) { ... }...

}

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

.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!

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

.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

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

.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)

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

.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)

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

.NET als Komponenteninfrastruktur, B. Tsarev 53

Danke für die Aufmerksamkeit!