GLOBAL.ASA : Commentaires 

 

C'est un fichier qui m'a posé beaucoup de problèmes la première fois, car il fallait comprendre comment l'utiliser et la documentation n'était pas claire. J'ai dû abandonner après quelques blocages et pertes de performances. Une deuxième tentative a eu plus de chance.

 

Le principe :

<script language="VBScript" runat="Server">

    Sub Application_OnStart ' Lancement du Serveur IIS
        Application("CTR")=0
    End Sub

    Sub Session_OnStart ' Connexion
        Application("CTR")=Application("CTR")+1
    End Sub

    Sub Session_OnEnd ' Déconnexion
        Application("CTR")=Application("CTR")-1
    End Sub

    Sub Application_OnEnd ' Arrêt de IIS
    End Sub

</script>

Utilisé simplement, il permet de mettre un compteur de connexions, ou plutôt un compteur de sessions. Et c'est là que commencent les problèmes, car les sessions se terminent 20 minutes après le départ de la personne connectée, et le compteur est donc faux.

Pour le rendre plus juste il faudrait mettre <%Session.Abandon%> en fin de chaque page ASP, et faire une croix sur les variables de session, si pratiques pour passer des paramètres entre pages.

Au mieux, on pourrait modifier le bloc Session_OnStart pour gagner 19 minutes.

    Sub Session_OnStart
        Application("CTR")=Application("CTR")+1
        Session.Timeout=1
    End Sub

 

Gestion des accès aux bases de données :

Pour éviter de définir les objets Connexion et RecordSet à chaque page, il est bien pratique d'utiliser les variables Application et Session (Interdit chez eWebCity) comme dans l'exemple suivant :

    Sub Application_OnStart
        Set Application("oC")=Server.CreateObject("ADODB.Connection")
        Application("oC").Open "ConnexionString"
        Application("CTR")=0
    End Sub

    Sub Session_OnStart
	Set Session("oRS")=Server.CreateObject("ADODB.Recordset")
	Session("oRS").ActiveConnection=Application("oC")
        Application("CTR")=Application("CTR")+1
        Session.Timeout=1
    End Sub

    Sub Session_OnEnd
        Application("CTR")=Application("CTR")-1
	Set Session("oRS")=Nothing
    End Sub

Mais toutes les pages ASP n'ont pas besoin d'une connexion à une base de données, et il vaut mieux faire le ménage dans les procédures Session_OnStart et Session_OnEnd, pour utiliser une procédure spéciale d'ouverture de RecordSet :

Sub OpenRS
        
    On Error Resume Next
    Session("oRS").Open SQL
    If Err.Number<>0 Then
        Err.Clear
        Set Session("oRS")=Server.CreateObject("ADODB.Recordset")
        If Err.Number=0 Then
            Session("oRS").ActiveConnection=Application("oC")
            Session("oRS").Open SQL
            If Err.Number<>0 Then
                Session.Abandon
                Err.Clear
            End If
        Else
            Session.Abandon
            Err.Clear
        End If
    End If

End Sub

Dans la variable SQL est placée la commande qui doit extraire les enregistrements à traiter. Si le RecordSet existe déjà pour la session, on va l'utiliser sans avoir à le définir. S'il n'existe pas on le crée. Si ce n'est pas possible, on abandonne l'opération.

Quand une page n'est pas chaînée sur une suivante, vous pouvez libérer l'objet RecordSet avec l'instruction suivante.

Session("oRS").Close
Set Session("oRS")=Nothing

© Alain Guimberteau