Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Global.asa: Verwendung, Events und Probleme

Geschrieben von: Christian Koller
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Die Global.asa ist eine praktische Funktionalität des IIS 4.0 und IIS 5.0. Alle ASP Seiten einer virtuellen Website unter IIS laufen (für gewöhnlich) in einem gemeinsamen Prozeß, der Server Application. Öffnet man im Internet Services Manager (ISM) für eine Website das Properties Fenster (Bild 1), so findet man unter der Karteikarte "Home Directory" die Einstellungen der Application (Bild 2).


Bild 1: Website Eigenschaften Fenster


Bild 2: Home Directory Karteikarte

Wie wichtig diese Application zur Ausführung von ASP Seiten ist, merkt man spätestens dann, wenn man die Application entfernt (durch Aktivieren von "Remove"). Die entfernte und damit deaktivierte Application wird im Website Properties Fenster durch Abwesenheit des Application Name und des Application Starting Point angezeigt (siehe Bild 3).


Bild 3: Application deaktiviert

Will man nun irgendeine ASP Seite von diesem Webserver aufrufen, erhält man nur die Meldung Server Application Error.


Bild 4: Server Application Error

Ein neuerliches Erstellen der Application geschieht durch Klicken auf den "Create" Button.

Die Application

Die Application kann man sich als Verwaltungsinstanz für alle ASP Seiten vorstellen. Alle ASP Seiten in der Application zusammen ergeben die ASP Application.

Im Internet Services Manager (Windows 2000) bzw. IIS Manager (Windows NT 4.0) hat man die Übersicht über alle Websites, die auf dem Webserver laufen (siehe Bild 5).


Bild 5: Internet Services Manager

Alle ASP Seiten einer Website laufen für gewöhnlich in einer Application und haben damit zum Beispiel die selben Application Variablen, den selben Pool von Session Variablen, und greifen auf die selbe Global.asa zu.

Damit die Application die Global.asa findet, muß die Global.asa Datei im sogenannten Starting Point der Application sein, also für gewöhnlich im Hauptverzeichnis der Website.

Die Datei Global.asa

Will man die Datei Global.asa einsetzen, so muß man diese in den Starting Point der Webserver Application (meist ins Hauptverzeichnis des Webservers) legen.

Was ist nun die Aufgabe der Global.asa, was kann man in Ihr tun?

Die Application-Events der Global.asa

Jedesmal wenn die Application startet und endet werden die Application_OnStart und Application_OnEnd "getriggert". Dies bedeutet, daß die Application_OnStart und Application_OnEnd Subroutinen ausgeführt werden.

Wie sehen diese Routinen in der Global.asa aus? Die Routinen werden als ganz normale Subs in <SCRIPT> Blöcken (Runat="SERVER") definiert:

<script language="VBScript" runat="SERVER">
Sub Application_OnStart()
   ...
End Sub

Sub Application_OnEnd()
   ...
End Sub
</script>

Application_OnStart

Wie schon erwähnt wird die Application_OnStart Subroutine ausgeführt wenn die Application startet. Dies ist genaugenommen mit dem ersten Aufruf einer dynmischen Internetseite (.asp, .shtml, ...) von der Website der Fall.

In der Application_OnStart kann man zum Beispiel bestimmte Parameter in Application Variablen schreiben, die von allen ASP Seiten aus zugänglich sind. In der Subroutine Application_OnStart sind von den IIS-eigenen Objekten nur das Application und das Server Objekt benutzbar. Jeder Zugriff auf ein Session, Request oder Response Objekt wird mit einem Laufzeitfehler quittiert.

Application_OnEnd

Die Application_OnEnd Routine wird ausgefüührt wenn die Website Application beendet wird. Man kann nicht immer davon ausgehen, daß die Application_OnEnd Routine ausgeführt wird. Bei einem Absturz des Servers (Stromsausfall oder Virus zum Beispiel) wird der Event nicht mehr ausgeführt.

Anmerkung: Die Server.MapPath Methode kann in der Application_OnEnd Routine nicht verwendet werden.

Die Session-Events der Global.asa

Die zwei Session Events Session_OnStart und Session_OnEnd können in der Global.asa angegeben sein:

<script language="VBScript" runat="SERVER">
' --- Application Events: ---
Sub Application_OnStart()
   ...
End Sub

Sub Application_OnEnd()
   ...
End Sub

' --- Session Events: ---
Sub Session_OnStart()
   ...
End Sub

Sub Session_OnEnd()
   ...
End Sub
</script>

Session_OnStart wird immer dann ausgeführt, wenn ein neuer User eine ASP Seite der Website (genauer gesagt der Website Application) aufruft.

Dabei wird dem Browser des Users ein Session Cookie gesendet, der verschlüsselt die ID der Session enthält. Wenn der Browser den Session Cookie nicht speichert, so wird bei jedem neuen ASP Seitenaufruf des Users eine neue Session gestartet und damit auch die Session_OnStart Routine in der Global.asa ausgeführt (siehe auch "Session Variablen - Verwendung und Stolpersteine").

Nimmt der Browser den Session Cookie an, so zählen alle weiteren Aufrufe von ASP Seiten der selben Website (bzw. der selben Website Applicatio) zur selben Session und somit wird die Session_OnStart Routine nur beim Aufruf der ersten ASP Seite der Session ausgeführt.

Im Session_OnStart Skript kann man alle IIS Objekte (Server, Application, Session, Request, Response und ObjectContext) ohne Einschränkungen verwenden.

Die Session_OnEnd Routine wird schließlich aufgerufen wenn die Session des Benutzers beendet wird. Dies ist im allgemeinen 20 Minuten nach dem letzen Aufruf einer ASP Seite der Fall. Die Zeitspanne bis zum "Timeout" der Session kann man mittels Session.Timeout Eigenschaft auslesen oder setzen.

Üblicherweise wird zu jedem Session_OnStart Event nach Beenden der Session ein zugehöriger Session_OnEnd Event mit der zugehörigen Routine der Global.asa aufgerufen.

Anmerkung: Die Verwendung der Server.MapPath Methode ist im Session_OnEnd Skript nicht möglich.

In den Session_OnStart und Session_OnEnd Routinen der Global.asa kann man Application Variablen setzen oder deren Werte verändern, Session Variablen setzen usw.

Globale Objekte in der Global.asa definieren

Mit Hilfe des <OBJECT> Tags ist es möglich in der Global.asa Objekte zu definieren, die auf jeder ASP Seite der Application direkt verfügbar sind. Der <OBJECT> Tag muß ausserhalb des <SCRIPT> Blocks stehen. Der Syntax zum Erstellen eines in allen ASP Seiten derApplication global einsetzbaren Objektes lautet:

<OBJECT RUNAT=Server SCOPE=Application 
ID=Identifier PROGID="progID">
</OBJECT>

Um zum Beispiel ein gemeinsames AdRotator Objekt (siehe auch "Bannerwerbung mit ASP") für alle ASP Seiten und ASP Sessions zu definieren, würden man ein Kommando wie folgt benutzen:

<OBJECT RUNAT=Server SCOPE=Application ID=AdRotator Conn PROGID="MSWC.AdRotator"">
</OBJECT>

Oft ist es erwünscht, daß für verschiedene Sessions verschiedene Objekte (gleichen Namens) zur Verfügung stehen. Zum Beispiel ist es sinnvoll, für jede Session ein eigenes Browser Type Objekt zu erzeugen. Dies wird durch das Setzen des Scope Parameters auf "Session" erreicht:

<OBJECT RUNAT=Server SCOPE=Session ID=BrowserType Conn PROGID="MSWC.BrowserType"">
</OBJECT>

Schlußbemerkung

In der Global.asa definiert man die vier Subroutinen, die beim Starten und Beenden einer Website Application und User-Session ausgeführt werden.

Man muß sich im Klaren darüber sein, wann die einzelnen Subroutinen ausgeführt werden um sie korrekt einsetzen zu können. So wird die Session_OnEnd Routine nicht sofort nach Schließen des Browsers ausgeführt, sondern erst wenn die Session beendet wird, also meist 20 Minuten nach dem letzen Aufruf einer ASP Seite.

Will man globale Objekte definieren, die für eine Session oder für eine Application in allen ASP Seiten der Application benutzt werden können, so verwendet man den <OBJECT> Tag:

<OBJECT RUNAT=Server SCOPE=Application ID=AdRotator Conn PROGID="MSWC.AdRotator"">
</OBJECT>

<OBJECT RUNAT=Server SCOPE=Session ID=BrowserType Conn PROGID="MSWC.BrowserType"">
</OBJECT>


<script language="VBScript" runat="SERVER">
' --- Application Events: ---
Sub Application_OnStart()
   ...
End Sub

Sub Application_OnEnd()
   ...
End Sub

' --- Session Events: ---
Sub Session_OnStart()
   ...
End Sub

Sub Session_OnEnd()
   ...
End Sub
</script>

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Debuggen von ASP Skripts - Teil 1
http:/www.aspheute.com/artikel/20000818.htm
Prüfen ob ein Browser Cookies annimmt
http:/www.aspheute.com/artikel/20000412.htm
Session Variablen - Verwendung und Stolpersteine
http:/www.aspheute.com/artikel/20000505.htm
Speichern von Recordsets in Application-Variablen (Teil I)
http:/www.aspheute.com/artikel/20000420.htm
Strukturierter Aufbau in der ASP-Programmierung
http:/www.aspheute.com/artikel/20011112.htm
Wieviele User sind online?
http:/www.aspheute.com/artikel/20010529.htm

Links zu anderen Sites

Global.asa Reference
http://msdn.microsoft.com/library/psdk/iisref/glob63vp.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.