Dieser Text ist ein Auszug aus dem Buch: "Microsoft ASP.NET - Das
Entwicklerbuch" (Weitere Infos
hier)
Architektur (ASP.NET 1.0 unter IIS 5.x)
Die ASP.NET-Architektur ist ein klein wenig komplexer als
die klassische ASP-Architektur. Neben der einer Internet Information Server
API (ISAPI) Server Extension (aspnet_isapi.dll)
gibt es einen die aspnet_wp.exe, die den
sogenannten ASP.NET-Arbeitsprozess (engl. ASP.NET-Arbeitsprozess) enthält.
Während im klassischen ASP die Webseiten von der
asp.dll interpretiert wurden und im Rahmen des IIS-Prozesses ausgeführt
wurden, werden die Webseiten nun kompiliert und laufen innerhalb der
aspnet_wp.exe. Man spricht bei dieser
Architektur auch vom ASP.NET Page Framework.
Abbildung 1.1: ASP.NET-Architektur

Shadowing
Eine ASP.NET-Webanwendung wird in Wirklichkeit nicht von
dem Ort ausgeführt, an dem sie gespeichert ist, sondern von einem automatisch
generierten Verzeichnis unterhalb von %Framework%/Temporary
ASP.NET Files. Dorthin kopiert der ASP.NET-Arbeitsprozess alle
relevanten Dateien. Man spricht hier von "Shadowing". Dies hat den Vorteil,
dass die Dateien innerhalb des Webservers nicht geloggt sind und jederzeit
ausgewechselt werden können.
Anwendungstrennung
Der ASP.NET-Arbeitsprozess eröffnet für jede Webanwendung
eine Application Domain. Durch diese Isolation wird die Stabilität von
ASP.NET-Anwendungen erhöht, weil eine Web-Anwendung durch eine andere
Web-Anwendung nicht mehr zum Absturz gebracht werden kann. Alle Webseiten
einer Webanwendung werden in diese Application Domain geladen. Die Application
Domain erhält einen eindeutigen Namen, in dem der Webservers, der virtuelle
Pfad und eine eindeutige Nummer vorkommen, z.B.
/LM/W3SVC/10/Root/Kapitel01-14-126681381626747979. Die Schreibweise
/W3SVC/10 entspricht dabei der Adressierung
dieses virtuellen Webservers via Active Directory Service Interface:
IIS://servername/W3SVC/10. Den Namen der
Application ermittelt man über
System.Threading.Thread.CurrentThread.GetDomain.FriendlyName.
Wenn sich eine der zur Webanwendungen gehörenden lokalen
Komponenten im /bin-Verzeichnis der
Webanwendung ändern, wird eine neue Application Domain eröffnet. Alle
laufenden Anfragen werden noch mit der alten Application Domain und den alten
Komponenten aus Verzeichnis %Framework%/Temporary
ASP.NET Files/ bearbeitet. Bei der ersten neuen Anfrage wird die neue
Komponente in ein anderes Unterverzeichnis kopiert, dass der neue Application
Domain zugeordnet ist. Die alte Application Domain wird nach Abarbeitung der
letzten Anfrage vernichtet.
Abbildung 1.2: Jede Webanwendung läuft in
einer eigenen Application Domain

Identität des Arbeitsprozesses
Der ASP.NET-Arbeitsprozess läuft nicht als Dienst,
sondern wird von der aspnet_isapi.dll beim
ersten Aufruf einer ASP.NET-Seite gestartet und beendet sich nach einer
konfigurierbaren Leerlaufzeit selbst. Der ASP.NET-Arbeitsprozess wird im
Standard unter dem Benutzerkonto ASPNET ausgeführt, dass bei der Installation
des .NET Frameworks zusätzlich angelegt wird.
Einstellungen im IIS 5.x
Es gibt im IIS 5.x keine besonderen Einstellungen für
ASP.NET – mit Ausnahme der Zuordnung der Dateiextensionen zu den
entsprechenden ISAPI-DLLs. ASP.NET wird fast komplett über
XML-Konfigurationsdatei innerhalb der Anwendung gesteuert. Lediglich die
Sicherheitseinstellungen haben Einfluss auf ASP.NET (Dies wird näher in
Kapitel 4 erläutert).
Architektur (ASP.NET 1.1 und IIS 6.0)
Die obige Architektur findet man unter IIS 5.0 (Windows
2000) und IIS 5.1 (Windows XP). Mit dem IIS 6.0 (Windows .NET Server-Familie)
gibt es eine stärkere Integration von IIS und ASP.NET (dort ASP.NET Version
1.1). Im IIS 6.0 werden alle dynamischen Webtechniken (klassisches ASP,
ASP.NET, Server Side Includes, Internet Database Connector) im Rahmen eines
externen Prozesses, dem IIS-Arbeitsprozess (W3WP.exe)
ausgeführt. Es kann mehr als eine Instanz von
W3WP.exe geben. Dafür kennt der IIS 6.0 als neues Instrument sogenannte
Application Pools.
IIS-Arbeitsprozess und ASP.NET-Arbeitsprozess erinnern
von Namen und Konzept her stark aneinander. ASP.NET war vor dem IIS 6.0 auf
dem Markt. Das IIS-Entwicklerteam besteht jedoch darauf, dass das ASP.NET-Team
dieses beim IIS-Team abgeschaut habe und nicht umgekehrt.
Abbildung 1.3:
Architektur IIS 6.0/ASP.NET 1.1

Aus Gründen der Vereinfachung wird im weiteren Buch an
vielen Stellen nur von dem ASP.NET-Arbeitsprozess gesprochen. Soweit nicht
anders erwähnt, gelten die Aussagen auch für den IIS-Arbeitsprozess, also
ASP.NET 1.1 und den IIS 6.0.
Application Pools
Ein Application Pool umfasst ein oder mehrere
IIS-Anwendungen. Eine IIS-Anwendung ist dabei ein virtueller Webserver oder
ein virtuelles Verzeichnis, das als "Anwendung" konfiguriert ist in der
IIS-Metabase. Jeder Application Pool hat seine eigene Instanz von
W3WP.exe. Es kann auch pro Application Pool
mehr als eine Instanz des Arbeitsprozesses geben. Der IIS Arbeitsprozess
ersetzt den ASP Arbeitsprozess: Er ist der .NET Runtime Host für ASPX-Seiten.
Gleichzeitig hostet dieser Prozess aber auch andere dynamische Webtechniken,
die innerhalb einer IIS-Anwendungen verwendet werden, die zum gleichen
Application Pool gehören.
Abbildung 1.4:
Zuordnung einer Webanwendung zu einem Application Pool

Application Domains
Die Ausführungen über das Anlegen und die Lebensdauer von
Application Domains in ASP.NET 1.0 gelten auch für ASP.NET 1.1. Die
Application Domain leben allerdings nicht mehr innerhalb der
aspnet_wp.exe, sondern innerhalb der
aspnet_isapi.dll, die wiederum in der
W3WP.exe lebt.
Recycling
Ein weiteres neues Feature von ASP.NET 1.1 unter IIS 6.0
ist, dass ASP.NET den IIS (auch ohne den Austausch einer der verwendeten
Komponenten) dazu bewegen kann, eine neue Instanz von
W3WP.exe zu starten, wenn es zu Problemen
bei der Verarbeitung kommt. Diesen Vorgang nennt man Recycling. Recycling kann
auch manuell im IIS Snap-in oder per Programmcode über das IIS-ADSI-Provider
für das Active Directory Service Interface (ADSI) oder den IIS-WMI-Provider
für die Windows Management Instrumentation (WMI) ausgelöst werden. Es kann
festgelegt werden, dass nach einer bestimmten Zeit oder einer bestimmten Zahl
von Abrufen ein automatisches Recycling erfolgt.
Recycling bedeutet nicht, dass alle aktuellen Anfragen
verworfen werden. Diese werden weiter von der aktuellen Instanz von
W3WP.exe beantwortet. Neue Anfragen gehen
jedoch an die neue Instanz. Die alte Instanz wird nach Beantwortung der
letzten Anfrage beendet (vgl. Ausführungen zum dynamischen Austausch von
Komponenten unter ASP.NET 1.0. Diese Ausführungen gelten natürlich auch für
ASP.NET 1.1).
Application-Pool-Einstellungen im IIS 6.0
Der IIS Arbeitsprozess im IIS 6.0 bietet neben dem
Recycling noch weitere verbesserte Einstellungsmöglichkeiten:
¨
Das Benutzerkonto (die Identität), unter dem der
IIS-Arbeitsprozess läuft, kann frei gewählt werden.
¨
Es kann eingestellt werden, dass der IIS den
Arbeitsprozess regelmässig überprüft und recycelt, wenn es zu Problemen kommt.
Dieses Feature wird Pinging genannt.
¨
Die Anzahl der Arbeitsprozesse pro Application Pool kann
eingestellt werden.
¨
Die maximale CPU-Nutzung eines Arbeitsprozesses kann festgelegt
werden.
Abbildung 1.5:
Application Pool-Einstellungen im IIS 6.0

Die Metabase in IIS 6.0 ist nicht mehr eine Binärdatei,
sondern eine XML-Datei (MetaBase.xml). Die
Metabase-XML-Datei kann direkt über einen beliebigen Editor oder – besser –
über das Internet-Dienst-MMC-Snap-In oder die Programmierschnittstellen Active
Directory Service Interface (ADSI) oder Windows Management Instrumentation (WMI)
verändert werden.