.NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte...
-
Upload
sylvia-dieter -
Category
Documents
-
view
223 -
download
0
Transcript of .NET als Komponenteninfrastruktur Vortragender: Boris Tsarev Seminar „Komponentenbasierte...
.NET als Komponenteninfrastruktur
Vortragender: Boris Tsarev
Seminar „Komponentenbasierte Software-Entwicklung“ – WS 04/05Prof. 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
.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
Interne Klasse3Interne Klasse4
Öffentliche Klasse2
.NET als Komponenteninfrastruktur, B. Tsarev 7
Architektur von .NET Framework.NET Programmiersprachen
Ein gemeinsames Typsystem für alle .NET SprachenUmfangreiche Klassen-Bibliothek
Laufzeitumgebung
.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
.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
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
.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)
IL-Code
Metadata
.NET Module
.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
.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
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
.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 CodeAssembly 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 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
.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]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
.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
• 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!
.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-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) { ... }...
}
.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 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)
.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)
.NET als Komponenteninfrastruktur, B. Tsarev 53
Danke für die Aufmerksamkeit!