Arbeiten mit HttpApplication-Instanzen
Während der Lebensdauer einer Anwendung verwaltet ASP.NET einen Pool von HttpApplication-Instanzen, die von der Datei Global.asax abgeleitet sind. Sobald die Anwendung eine HTTP-Anforderung empfängt, wird vom ASP.NET-Seitenframework eine dieser Instanzen zugewiesen, um die Anforderung zu verarbeiten. Genau diese HttpApplication-Instanz ist dafür verantwortlich, die Anforderung, der sie zugewiesen ist, über die gesamte Lebensdauer zu verwalten. Die Instanz kann erst wieder verwendet werden, nachdem die Anforderung vollständig verarbeitet wurde.
Der programmgesteuerte Zugriff auf die Methoden HttpApplication.Init und HttpApplication.Dispose sowie auf die Ereignisse Application_OnStart und Application_OnEnd wird durch die HttpApplication-Klasse ermöglicht. Außerdem können Sie auf beliebige Ereignisse zugreifen, die durch HttpModule offen gelegt werden.
Überschreiben der Methoden "Init" und "Dispose"
Die HttpApplication.Init-Methode wird direkt nach der Erstellung einer Instanz der HttpApplication-Klasse aufgerufen. Mit Hilfe dieser Methode können beliebige Objekte erstellt und konfiguriert werden, die für alle behandelnden Ereignisse verwendet werden sollen. Siehe dazu folgendes Beispiel.
<script language="VB" runat="server">
Public Overrides Sub Init()
'Insert something interesting here.
End Sub
</script>
[C#]
<script language="C#" runat="server">
public override void Init() {
// Insert something interesting here.
}
</script>
Die Init-Methode unterscheidet sich vom Application_OnStart-Ereignis, da sie stets für alle HttpApplication-Instanzen innerhalb einer Anwendung aufgerufen wird. Application_OnStart wird nur einmal während der Lebensdauer einer Anwendung ausgelöst, und zwar für die erste Instanz von HttpApplication. Application_OnStart sollte nur verwendet werden, um einen Zustand zu erstellen oder zu ändern, der auf alle Pipelineinstanzen angewendet wird, z. B. die Verwendung des ApplicationState-Objekts. Das Ereignis sollte nicht zum Erstellen lokaler Variablen verwendet werden, da lokale Variablen nicht von mehreren HttpApplication-Instanzen gemeinsam genutzt werden. Rufen Sie die HttpApplication.Dispose-Methode unmittelbar vor der Zerstörung einer Instanz der HttpApplication-Klasse auf. Diese Methode kann zum Bereinigen lokaler Ressourcen verwendet werden.
Die Dispose-Methode unterscheidet sich vom Application_OnEnd-Ereignis, da sie stets für alle HttpApplication-Instanzen innerhalb einer Anwendung aufgerufen wird. Application_OnEnd wird nur einmal während der Lebensdauer einer Anwendung ausgelöst, und zwar für die letzte aufgelöste Instanz von HttpApplication. Application_OnEnd sollte nur verwendet werden, um Zustände oder Ressourcen zu bereinigen, die auf alle Pipelineinstanzen angewendet werden, z. B. die Verwendung des ApplicationState-Objekts. Das Ereignis sollte nicht zum Bereinigen lokaler Variablen verwendet werden, da lokale Variablen nicht von mehreren HttpApplication-Instanzen gemeinsam genutzt werden.
Die Ereignisse Request, Response und Session einer HttpApplication-Instanz können nicht während der Init- oder Dispose-Phase einer Anforderungsverarbeitung verwendet werden.
Das folgende Beispiel veranschaulicht, wie Sie die beiden von der HttpApplication-Basisklasse bereitgestellten Lebenszyklusmethoden überschreiben können.
<script language="VB" runat=server>
Public Overrides Sub Init()
' Init override code goes here.
End Sub
Public Overrides Sub Dispose()
' Init override code goes here.
End Sub
</script>
[C#]
<script language="C#" runat=server>
public override void Init() {
// Init override code goes here.
}
public override void Dispose() {
// Init override code goes here.
}
</script>
Behandeln von HttpApplication-Ereignissen
Die Datei Global.asax kann zur Synchronisierung von Ereignissen verwendet werden, die von der HttpApplication-Basisklasse bereitgestellt werden. Dazu verwenden Sie beim Schreiben von Methoden das folgende Benennungsmuster:
Application_EventName(AppropriateEventArgumentSignature)
Wenn im Code beispielsweise auf die Anwendungsereignisse OnStart, BeginRequest und OnEnd reagiert werden soll, können Sie mit dem folgendem Beispiel vergleichbaren Code in die Datei Global.asax einfügen.
<Script language="VB" runat="server">
Sub Application_OnStart()
'Application start-up code goes here.
End Sub
Sub Application_BeginRequest()
'Application code for each request could go here.
End Sub
Sub Application_OnEnd()
'Application clean-up code goes here.
End Sub
</script>
[C#]
<Script language="C#" runat="server">
public void Application_OnStart() {
// Application start-up code goes here.
}
public void Application_BeginRequest() {
// Application code for each request could go here.
}
public void Application_OnEnd() {
// Application clean-up code goes here.
}
</script>
Siehe auch
Datei "Global.asax" | HttpApplication-Klasse | HttpApplication.Init | HttpApplication.Dispose