Global.asa: Verwendung, Events und Probleme
Geschrieben von: Christian Koller 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).
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).
Will man nun irgendeine ASP Seite von diesem Webserver aufrufen, erhält man nur die Meldung Server Application Error.
Ein neuerliches Erstellen der Application geschieht durch Klicken auf den "Create" Button. Die ApplicationDie 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).
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.asaWill 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.asaJedesmal 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_OnStartWie 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_OnEndDie 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.asaDie 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
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 definierenMit 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ßbemerkungIn 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> Verwandte Artikel
Debuggen von ASP Skripts - Teil 1 Links zu anderen SitesWenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |