INFO: Anwendungsinstanzen, Anwendungsereignisse und Anwendungsstatus in ASP.NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 312607 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D312607
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
312607 INFO: Application Instances, Application Events, and Application State in ASP.NET
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Das ASP.NET-Objekt HttpApplication verbirgt viele komplexe Konzepte zur Vereinfachung des Programmierungsmodells. Dieser Artikel beschreibt einige dieser komplexen Konzepte. Außerdem beschreibt der Artikel, wie ASP.NET Kompatibilitätsprobleme mit dem Objekt Application im klassischen Microsoft ASP (Active Server Pages) behandelt.

Dieser Artikel ist in die folgenden Abschnitte unterteilt:

Weitere Informationen

Anwendungsklasse und Anwendungsinstanzen

Eine Anwendungsklasse wird in der Datei "Global.asax" definiert. Der Code in "Global.asax" definiert eine neue Klasse, die von System.Web.HttpApplication abgeleitet wird. Wenn die Datei "Global.asax" nicht existiert, wird die Basisklasse HttpApplication als Anwendungsklasse verwendet.

Die ASP.NET-Laufzeit erstellt so viele Instanzen von Anwendungsklassen wie erforderlich, um Anforderungen gleichzeitig bearbeiten zu können. Bei den meisten Anwendungen ist diese Anzahl auf die Anzahl der Threads beschränkt und bewegt sich zwischen 1 und 100, je nach Hardware, Serverbelastung, Konfiguration usw. Für viele Anforderungen werden Anwendungsinstanzen wieder verwendet, und in Phasen geringerer Last wird eine Liste freier Anwendungsinstanzen geführt. Anwendungsinstanzen werden thread-sicher verwendet, d.h., für jeweils nur eine Anforderung. Das hat wichtige Auswirkungen:
  • Sie müssen sich nicht um das Sperren kümmern, wenn Sie auf nicht-statische Member der Anwendungsklasse zugreifen.
  • Der Anwendungscode kann Anforderungsdaten für jede Anforderung in nicht-statischen Membern der Anwendungsklasse speichern (jedoch nicht nach dem Ereignis EndRequest, da dieses Ereignis die Anforderung für lange Zeit verwalten kann).
Da statische Member aller Klassen, einschließlich Anwendungsklassen, nicht thread-sicher sind, muss der Anwendercode für den Zugriff auf statische Member entsprechende Sperrmechanismen vorsehen. Das gilt für alle statischen Member, die Sie zur Anwendungsklasse hinzufügen.

Orientieren Sie sich beim Zugriff auf die Anwendungsinstanz, die mit der aktuellen Anforderung verknüpft ist, an folgenden Richtlinien:
  • Verwenden Sie das Objekt this oder Me aus der Datei "Global.asax".
  • Jede Seite enthält eine stark typisierte Eigenschaft ApplicationInstance einer Seite.
  • Verwenden Sie aus dem Objekt HttpContext die Eigenschaft HttpContext.ApplicationInstance (anzugeben als HttpApplication).
Hinweis: Da Application auf das globale Anwendungsstatuswörterbuch im klassischen ASP verweist, verwendet ASP.NET ApplicationInstance und nicht Application als Eigenschaftsnamen, um auf die Anwendungsinstanz zu verweisen, die die aktuelle Anforderung verarbeitet.

Anwendungsereignisse

Die Gültigkeitsdauer einer Anforderung besteht aus einer Folge der Anwendungsereignisse (und einigen impliziten Schritten, die ASP.NET implementiert). Die Ereignisse in der Reihenfolge ihrer Ausführung:
  1. Ereignis BeginRequest Ereignis AuthenticateRequest Internes Ereignis DefaultAuthentication Ereignis AuthorizeRequest Ereignis ResolveRequestCache Interner Schritt ("map handler"; wenn die Kompilierung stattfindet, wird eine Seiteninstanz erstellt) Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  2. Ereignis AuthenticateRequest Internes Ereignis DefaultAuthentication Ereignis AuthorizeRequest Ereignis ResolveRequestCache Interner Schritt ("map handler"; wenn die Kompilierung stattfindet, wird eine Seiteninstanz erstellt) Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  3. Internes Ereignis DefaultAuthentication Ereignis AuthorizeRequest Ereignis ResolveRequestCache Interner Schritt ("map handler"; wenn die Kompilierung stattfindet, wird eine Seiteninstanz erstellt) Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  4. Ereignis AuthorizeRequest Ereignis ResolveRequestCache Interner Schritt ("map handler"; wenn die Kompilierung stattfindet, wird eine Seiteninstanz erstellt) Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  5. Ereignis ResolveRequestCache Interner Schritt ("map handler"; wenn die Kompilierung stattfindet, wird eine Seiteninstanz erstellt) Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  6. Interner Schritt ("map handler"; wenn die Kompilierung stattfindet, wird eine Seiteninstanz erstellt) Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  7. Ereignis AcquireRequestState Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  8. Ereignis PreRequestHandlerExecute Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  9. Interner Schritt ("execute handler"; wenn der Seitencode ausgeführt wird) Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  10. Ereignis PostRequestHandlerExecute Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  11. Ereignis ReleaseRequestState Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  12. Interner Schritt (Filterung der Antworten) Ereignis UpdateRequestCache Ereignis EndRequest
  13. Ereignis UpdateRequestCache Ereignis EndRequest
  14. Ereignis EndRequest
Die folgenden Elemente können diese Ereignisse behandeln:
  • Internes ASP.NET-Seiten-Framework (z.B. Schritte 6, 9 und 12 in der obigen Liste)
  • HTTP-Module, die für die Anwendung konfiguriert sind. Die Standardliste für HTTP-Module ist in der Datei "Machine.config" definiert.
  • Code in Global.asax, der über die Hook-Funktion durch die Methode Application_[On]EventName eingebunden oder explizit eingebunden wird, wenn Sie Ereignishandler für einen alternativen Handlernamen hinzufügen.
Jedes Ereignis kann synchrone und asynchrone Abonnenten haben. Asynchrone Abonnenten werden zuerst ausgeführt. Nicht alle Ereignisse werden immer ausgeführt; das einzige Ereignis, das immer ausgeführt wird, ist EndRequest. Führen Sie deshalb alle auf Anforderungen folgenden Bereinigungsaktivitäten im Ereignis EndRequest aus.

Hinweis: In den meisten Fällen wird die eigentliche Antwort an den Client gesendet, nachdem die Anwendungsinstanz die Antwort verarbeitet hat (also nach EndRequest).

Application_OnStart und Application_OnEnd

ASP.NET führt die eindeutigen "Ereignisse" Application_OnStart und Application_OnEnd ein, um die Kompatibilität mit dem klassischen ASP zu gewährleisten. Diese "Ereignisse" werden während der Lebensdauer einer Anwendung nur einmal ausgeführt und nicht für jede Anwendungsinstanz. Wenn Sie also nicht-statische Member in diesen Methoden ändern, so ist nur eine Anwendungsinstanz davon betroffen, nicht alle. Sie können eine Anwendungsinstanz entweder im Konstruktor initialisieren oder durch Überschreiben der Methode Init.

Application_OnStart ist eine logische Entsprechung zum Klassenkonstruktor für die Anwendungsklasse, bietet jedoch einen Vorteil: Der Code hat Zugriff auf den HttpContext für die erste Anforderung an die Anwendung.

Anwendungsstatus

Der Anwendungsstatus ist ein globales Wörterbuch spät gebundener Objekte, die das klassische ASP einführt, um das Fehlen globaler Variablen in der Microsoft Visual Basic Scripting Edition (VBScript) auszugleichen. In ASP.NET können Sie über eine der folgenden Möglichkeiten auf den Anwendungsstatus zugreifen:
  • Eigenschaft Application (definiert in den Klassen HttpApplication und Page)
  • HttpContext.Application
ASP.NET enthält den Anwendungsstatus in erster Linie aus Gründen der Kompatibilität mit dem klassischen ASP, damit es einfacher ist, bestehende Anwendungen nach ASP.NET zu migrieren. Sie sollten Daten in statischen Membern der Anwendungsklasse anstatt im Objekt Application speichern. Dadurch wird die Leistung verbessert, da Sie schneller auf eine statische Variable als auf ein Element im Anwendungswörterbuch zugreifen können.

Sie müssen das Attribut ClassName in der Datei "Global.asax" zur Benennung Ihrer Anwendungsklasse verwenden, um von Seiten in Microsoft Visual C# .NET und Microsoft Visual Basic .NET auf statische Anwendungsmember zugreifen zu können. Beispiel:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
Wenn ein statisches Member in Ihrer Datei "Global.asax" MyStaticMember heißt, können Sie über MyClass.MyStaticMember von Ihrer Seite aus darauf zugreifen.

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 312607 - Geändert am: Donnerstag, 17. Januar 2002 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ASP .NET (Bestandteil des .NET Framework)
Keywords: 
kbgrpdsasp kbhttpruntime kbinfo kbstate KB312607
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com