GLOBAL.ASA  

Vous déclarez les objets, les variables et les gestionnaires d'événements (notamment pour les procédures d'événements OnStart et OnEnd des objets Application et Session) ayant une étendue session ou application dans le fichier GLOBAL.ASA . Il ne peut exister qu'un seul fichier GLOBAL.ASA par répertoire virtuel ou application ASP. Par exemple, supposons que vous disposiez d'une application de recherche ASP composée de tous les scripts dans le répertoire virtuel /Search. Vous ne pouvez avoir qu'un fichier GLOBAL.ASA dans le répertoire virtuel, et il doit se trouver à la racine du répertoire (/Search). Un second fichier GLOBAL.ASA dans tout autre sous-répertoire du répertoire /Search sera ignoré par ASP.DLL.

Le fichier GLOBAL.ASA peut contenir des éléments non affichables ; ce type de contenu est ignoré par ASP.DLL. Tout script non entouré de balises <SCRIPT> aboutit à une erreur, de même que l'instanciation d'un composant serveur ne prenant pas en charge l'étendue de niveau session ou application. Enfin, vous devez nommer ce fichier GLOBAL.ASA, et il ne peut être situé qu'à la racine du répertoire virtuel constituant l'application ASP. Comme dans les autres scripts, vous pouvez utiliser tout langage de script pris en charge dans le fichier GLOBAL.ASA et regrouper les procédures d'événement utilisant le même langage à l'intérieur d'un jeu de balises <SCRIPT>...</SCRIPT>.

La section sur le fichier GLOBAL.ASA dans ce chapitre contient les rubriques suivantes :

    Evénements d'objet Application et étendue Application

    Evénements d'objet Session et étendue Session

    Déclarations de bibliothèque de types

GLOBAL.ASA : Commentaires/Dépannage  
 
 

Lorsque vous apportez des modifications dans le fichier GLOBAL.ASA pour une application, le serveur Web termine toutes les requêtes en cours pour l'application donnée avant de recompiler le fichier GLOBAL.ASA. Selon Microsoft, une fois que les requêtes en cours ont été traitées, le fichier est recompilé, et toute nouvelle session démarrée dans l'application en cours déclenche le traitement du code du fichier GLOBAL.ASA. Pendant cette recompilation, le serveur ignore toutes les nouvelles requêtes pour les scripts dans l'application. Malheureusement, en réalité, cette procédure ne fonctionne pas avec Personal Web Server, IIS 3.0 et IIS 4.0. Vous êtes contraint de redémarrer l'ordinateur avant que le nouveau fichier GLOBAL.ASA ne soit traité !

Notez que les sessions restant actives pendant ce temps ne sont pas affectées par les modifications que vous apportez dans le fichier GLOBAL.ASA. Une fois que le serveur Web a recompilé le fichier GLOBAL.ASA, toutes les sessions actives supprimées, ainsi que les procédures d'événement Session_OnEnd et Application_OnEnd dans le (nouveau) fichier GLOBAL.ASA sont appelées. Les utilisateurs doivent effectuer une nouvelle requête dans l'application Web pour commencer les nouvelles sessions. Les nouvelles sessions commencent par le traitement du nouveau fichier GLOBAL.ASA.

Pour le développement de vos fichiers GLOBAL.ASA, il est important de garder à l'esprit que la modification de tout code inclus dans le fichier lorsque vous utilisez une inclusion côté serveur n'aboutit pas à la recompilation du fichier GLOBAL.ASA par le serveur Web. En réalité, vous devez enregistrer de nouveau le fichier GLOBAL.ASA (même si vous ne l'avez pas modifié !) pour lancer sa recompilation.

Votre fichier GLOBAL.ASA peut contenir des procédures, ainsi que des fonctions. Toutefois, ces procédures ne peuvent être appelées que par les procédures d'événement Session_OnStart, Session_OnEnd, Application_OnStart et Application_OnEnd (lesquelles ne peuvent résider que dans le fichier GLOBAL.ASA). Si vous souhaitez utiliser ces fonctions/procédures dans d'autres fichiers dans votre application, envisagez d'utiliser un fichier d'inclusion côté serveur contenant le script à appeler.

Enfin, comme tous les autres scripts dans votre application Web, vous devez sécuriser soigneusement votre fichier GLOBAL.ASA à l'aide de la sécurité Windows NT. Dans le cas contraire, les clients pourront accéder à ce fichier. Etant donné que le fichier GLOBAL.ASA contient souvent du code associé à la sécurité de votre application, cette précaution est très importante.

Evénements d'objet Application et étendue Application  
<SCRIPT LANGUAGE=strLangEngine RUNAT = SERVER>
Sub Application_OnStart
      Event procedure code...
End Sub

Sub Application_OnEnd
      Event procedure code...
End Sub
</SCRIPT>
 
<SCRIPT LANGUAGE=strLangEngine RUNAT = SERVER>
Sub Application_OnStart
      Event procedure code...
End Sub

Sub Application_OnEnd
      Event procedure code...
End Sub
</SCRIPT>

Dans le fichier GLOBAL.ASA, vous pouvez inclure du code de procédure d'événement pour les deux événements de l'objet Application : OnStart et OnEnd. Ces deux événements se déclenchent respectivement lorsque le premier client demande une page dans votre application et à la fin de la dernière session de l'utilisateur dans votre application. Ces événements sont traités en détail au chapitre 4. Dans le présent chapitre, certaines de ces rubriques sont reprises, ainsi que leur application et utilisation dans le fichier GLOBAL.ASA.

Pour consulter les informations traitées dans le chapitre Objet Application, une application ASP est composée de tous les fichiers dans un répertoire virtuel et de tous les fichiers dans les sous-répertoires du répertoire virtuel. Lorsqu'une variable ou un objet contient une étendue Application, il contient la ou les mêmes valeurs pour chaque utilisateur en cours de l'application, et tout utilisateur peut modifier les valeurs d'une variable ou objet avec une étendue Application. Une telle modification affecte la valeur visualisée par la suite, par tout utilisateur.

 
Paramètres
strLangEngine

Chaîne dont la valeur représente le nom d'un moteur de script côté serveur valide. Il s'agit du moteur VBScript, le moteur par défaut sur les serveurs Web IIS. Vous pouvez, toutefois, utiliser JScript, PerlScript, Python, REXX ou tout autre moteur de script prenant en charge l'environnement de script IIS.

 
Exemple
[Excerpt from GLOBAL.ASA]

<OBJECT RUNAT=Server 
SCOPE=Application
ID=AppInfo1 
PROGID="MSWC.MyInfo">
</OBJECT>

<SCRIPT LANGUAGE = "VBScript" RUNAT="Server">
Sub Application_OnStart

    Dim objCounters
    Dim gdatAppStartDate

    ' The following object variable will hold a Counters
    ' component.
    Set objCounters = Server.CreateObject("MSWC.Counters")
    
    ' The following application-level variable will
    ' hold the start date of the application.
    gdatAppStartDate = Date( )

End Sub

Sub Application_OnEnd

    ' The following code destroys the application-scoped
    ' Counters component.
    Set objCounters = Nothing
    
    ' The following clears the application-level variable.
    gdatAppStartDate = "

    ' NOTE: This code is not strictly necessary in this
    ' instance as this object and variable will be released
    ' from memory by the web server itself when the application
    ' ends. This example simply demonstrates how these event
    ' procedures work. For suggestions for the Application
    ' object's use, see the following and Chapter 4.

End Sub

</SCRIPT>
 
Remarques

Vous devez garder à l'esprit plusieurs points concernant le fichier GLOBAL.ASA en général, et les procédures d'événement Application, en particulier. Le premier point est que le fichier GLOBAL.ASA n'est pas impératif. Votre application ASP fonctionnera parfaitement sans lui. En fait, l'absence d'un fichier GLOBAL.ASA augmente la vitesse d'accès de la première page requise dans votre application ASP, car l'exécution du fichier GLOBAL.ASA et l'exécution du script requis prennent plus de temps que l'exécution du script requis uniquement.

Ensuite, si vous avez un fichier GLOBAL.ASA, il n'est pas nécessaire de coder votre procédure d'événement Application_OnEnd, puisque le serveur Web libère de lui-même la mémoire utilisée pour les objets et les variables d'étendue Application à la fin de l'application. Toutefois, si vous souhaitez enregistrer des informations (dans une base de données, par exemple) spécifiques à l'exécution d'une application, vous pouvez coder pour cela dans la procédure d'événement Application_OnEnd. Par exemple, vous pouvez créer une variable de compteur de pages de niveau application et enregistrer sa valeur dans un fichier texte à la fin d'une application pour l'utiliser la prochaine fois que les fichiers de l'application sont requis et que l'application est relancée. (Notez, toutefois, que de meilleures méthodes s'offrent à vous pour exécuter cette opération.)

Pour plus de renseignements sur les procédures d'événement de l'objet Application, voir le chapitre 4.

 
Evénements d'objet Session et étendue Session  
<SCRIPT LANGUAGE=strLangEngine RUNAT = SERVER>
Sub Session_OnStart
      Event procedure code...
End Sub

Sub Session_OnEnd
      Event procedure code...
End Sub
</SCRIPT>
 
<SCRIPT LANGUAGE=strLangEngine RUNAT = SERVER>
Sub Session_OnStart
      Event procedure code...
End Sub

Sub Session_OnEnd
      Event procedure code...
End Sub
</SCRIPT>

Dans le fichier GLOBAL.ASA, vous pouvez inclure du code de procédure d'événement pour les deux événements de l'objet Session : OnStart et OnEnd. Ces deux événements se déclenchent respectivement lorsqu'un client demande pour la première fois une page dans votre application et à la fin de la session de l'utilisateur (par défaut, 20 minutes après la dernière requête de l'utilisateur). Ces événements sont traités en détail au chapitre 10. Dans le présent chapitre, certaines de ces rubriques sont reprises, ainsi que leur application dans le fichier GLOBAL.ASA.

 
Paramètres
strLangEngine

Chaîne dont la valeur représente le nom d'un moteur de script côté serveur valide. Il s'agit du moteur VBScript, le moteur par défaut sur les serveurs Web IIS. Vous pouvez, toutefois, utiliser JScript, PerlScript, Python, REXX ou tout autre moteur de script prenant en charge l'environnement de script IIS.

 
Exemple
[Excerpt from GLOBAL.ASA]

<OBJECT RUNAT=Server 
SCOPE=Session
ID=Tool1 
PROGID="MSWC.Tools">
</OBJECT>

<SCRIPT LANGUAGE = "VBScript" RUNAT="Server">
Sub Session_OnStart

    Dim strLogonUser
    Dim StrUserSecurity

    ' The following session-level variables will hold
    ' the user's logon name and security clearance.
    strLogonUser = Request.ServerVariables("USER_LOGON")
    strUserSecurity = "PUBLIC"

End Sub

Sub Session_OnEnd

    ' The following code destroys the session-scoped
    ' Tools component.
    Set Tool1 = Nothing
    
    ' The following clears the session-level variables.
    strLogonUser = "
    strUserSecurity = "

    ' NOTE: This code is not strictly necessary in this
    ' instance as this object and variable will be released
    ' from memory by the web server itself when the session
    ' ends. This example simply demonstrates how these event
    ' procedures work. For suggestions for the Application
    ' object's use, see later in this chapter and chapitre 10.

End Sub

</SCRIPT>
 
Remarques

Pour consulter les remarques sur les procédures d'événement Session, voir le chapitre 10.

 
Déclarations de bibliothèque de types  
<!-- METADATA TYPE="TypeLibrary"
FILE="FileName"
UUID="TypeLibraryUUID"
VERSION="MajorVersionNumber.MinorVersionNumber"
LCID="LocaleID"
-->
 
<!-- METADATA TYPE="TypeLibrary"
FILE="FileName"
UUID="TypeLibraryUUID"
VERSION="MajorVersionNumber.MinorVersionNumber"
LCID="LocaleID"
-->

Les bibliothèques de types sont des fichiers accessoires contenant des informations sur les propriétés et méthodes des objets COM. Ces fichiers décrivent les constantes utilisées par l'objet et les types de données des valeurs de propriété acceptables. La bibliothèque de types permet à votre application d'indiquer avec plus de précision les erreurs survenant de votre utilisation de l'objet auquel correspond la bibliothèque de types. Elle vous permet également d'utiliser les constantes définies dans la DLL de l'objet. Cela peut réduire considérablement la complexité du code d'un objet et améliorer la lisibilité et la réutilisation de votre code sans vous obliger à créer et à utiliser les inclusions côté serveur, difficiles à gérer pour tous vos objets.

Comme vous le savez, vous pouvez instancier des objets d'étendue application et session dans le fichier GLOBAL.ASA. Si l'un de ces objets a une bibliothèque de types correspondante, vous pouvez déclarer son utilisation dans le fichier GLOBAL.ASA de l'application.

 
Paramètres
FileName

Le chemin d'accès physique (pas virtuel) entier et le nom de fichier du fichier de la bibliothèque de types pour l'objet en question. Si vous incluez un paramètre FileName et un paramètre TypeLibraryUUID dans la déclaration TypeLibrary, le serveur Web identifie la bibliothèque de types par son nom de fichier. Vous devez inclure le paramètre FileName ou TypeLibraryUUID.

TypeLibraryUUID

Le numéro d'identification unique et universel de la bibliothèque de types. Ce numéro est différent de l'UUID de l'objet COM, et il est défini dans le registre comme un sous-indicatif de HKEY_CLASSES_ROOT\TypeLib. Si vous incluez un paramètre FileName et un paramètre TypeLibraryUUID dans la déclaration TypeLibrary, le serveur Web identifie la bibliothèque de types par son nom de fichier. Vous devez inclure le paramètre FileName ou TypeLibraryUUID.

MajorVersionNumber

Le numéro de version principal de la bibliothèque de types. Si ce paramètre facultatif est fourni, et que le serveur Web ne trouve pas le fichier avec le numéro principal correct de la version, alors le serveur Web génère une erreur. Si vous incluez un paramètre MajorVersionNumber, vous devez également inclure un paramètre MinorVersionNumber.

MinorVersionNumber

Le numéro de version secondaire de la bibliothèque de types. Si ce paramètre facultatif est fourni, et que le serveur Web ne trouve pas le fichier avec le numéro secondaire correct de la version, alors le serveur Web génère une erreur. Si vous incluez un paramètre MinorVersionNumber, vous devez également inclure un paramètre MajorVersionNumber.

LocaleID

Chaque bibliothèque de types prend en charge différentes langues. Le paramètre LocaleID représente la langue à utiliser pour la bibliothèque de types. Si la langue indiquée n'est pas trouvée dans la bibliothèque de types, alors le serveur Web génère une erreur. Comme le paramètre VERSION de la déclaration TypeLibrary, ce paramètre est facultatif.

 
Exemple
[Excerpt from GLOBAL.ASA]

<!-- METADATA TYPE="TypeLibrary"
FILE="Report.LIB"
VERSION="1.5"
LCID="1306"
-->
 
Remarques

Ce code déclare l'utilisation de la version 1.5 de la bibliothèque de types de l'objet Report COM. L'identificateur des paramètres régionaux (LCID) utilisé est le français. Si la version 1.5 de cette bibliothèque de types de l'objet COM n'est pas trouvée, ou si le LCID 1306 (pour le français) n'est pas pris en charge par la bibliothèque de types, le code aboutit à une erreur.

Lorsque vous utilisez une bibliothèque de types à partir d'une application ASP, vous utilisez, en réalité, une version de la bibliothèque de types encapsulée dans une enveloppe. IIS crée cette enveloppe pour votre bibliothèque de types en arrière-plan.

Pour le style de codage, Microsoft propose d'inclure les déclarations de la bibliothèque de types près du début du fichier GLOBAL.ASA, mais aucune différence n'est apparente si vous les placez ailleurs dans le fichier. De même, vous n'êtes pas obligé de placer la déclaration TypeLibrary en dehors des balises <SCRIPT>.

L'utilisation dans une application ASP de bibliothèques de types provenant de plusieurs objets COM (notamment si les objets COM sont écrits par différents développeurs) pose un problème de constantes redondandes dans l'objet. Vous pouvez éviter cela en faisant référence à ces constantes en utilisant le nom de l'objet COM comme préfixe dans le nom des constantes. Par exemple, la constante adStoredProcedure de la bibliothèque de types ADODB peut être appelée ADODB.adStoredProcedure.

Enfin, le serveur Web peut renvoyer l'une des erreurs répertoriées dans ce tableau si vous déclarez incorrectement votre bibliothèque de types.

Code d'erreur

Description

ASP 0222

Déclaration de bibliothèque de types invalide.

ASP 0223

Bibliothèque de types introuvable. Par exemple, si la bibliothèque de types indiquée dans la balise METADATA n'existe pas, cette erreur s'affiche.

ASP 0224

Impossible de charger la bibliothèque de types déclarée. La raison est inconnue, d'autant plus que la bibliothèque a été correctement trouvée.

ASP 0225

Le serveur Web ne peut pas créer une enveloppe pour la bibliothèque de types déclarée dans la balise METADATA. La raison est inconnue.