Objet Application | |
Dans le contexte des pages ASP, une application est la somme de tous les fichiers accessibles via un répertoire virtuel donné et les sous-répertoires qu'il contient. Le contexte d'application ASP se présente de la même manière pour tous les clients qui utilisent l'application. Par exemple, un client en Thaïlande demandant des pages de votre répertoire virtuel Les applications ASP vous permettent de partager des informations dans une application de la même manière que les applications autonomes traditionnelles. Vous pouvez partager les informations avec tous les clients d'une application ASP donnée en utilisant l'objet Application. Cet objet intégré représente l'application ASP elle-même, et est un objet unique quel que soit le nombre ou le type de clients accédant à l'application, et quelle que soit la partie de l'application que les clients demandent. L'objet Application est initialisé par IIS dès que le premier client requiert un fichier quelconque du répertoire virtuel donné. Il est conservé en mémoire sur le serveur jusqu'à l'arrêt du service Web ou jusqu'au déchargement explicite de l'application du serveur Web à l'aide de la console de gestion Microsoft Management Console. IIS vous permet d'instancier les variables et les objets avec une étendue au niveau de l'application. Cela signifie qu'une variable donnée contient la même valeur pour tous les clients de votre application. Vous pouvez également instancier les objets côté serveur avec une étendue au niveau de l'application contenant aussi les mêmes valeurs pour tous les clients. Ces variables et objets au niveau de l'application peuvent être atteints et modifiés depuis le contexte d'une session d'utilisateur quelconque et depuis tout fichier dans l'application en cours. Comme indiqué précédemment, l'initialisation de l'objet Application se produit lorsque le premier utilisateur de votre application requiert un fichier du répertoire virtuel compris dans l'application ASP. Cette initialisation peut être considérée comme une réserve de mémoire pour l'application ASP donnée. Le serveur Web instancie et initialise l'objet Application pour vous. Toutefois, vous pouvez personnaliser l'initialisation en insérant du code dans un fichier facultatif spécial appelé Le fichier Le fichier Les variables et objets avec étendue au niveau de l'application ont toujours la même valeur pour tous les utilisateurs pendant la durée de vie de l'application. Si un utilisateur demande une page contenant du code capable de modifier la valeur d'une variable au niveau de l'application, alors la valeur de cette variable est modifiée pour tous les utilisateurs. Le problème suivant se pose : il est possible que deux utilisateurs ou plus tentent de modifier la valeur de la même variable au même moment. Heureusement, ASP fournit des méthodes de verrouillage/déverrouillage de l'objet Application pour éviter ce type de conflit. Tout comme lors de l'utilisation de variables globales dans une application multithread, vous devez prendre les mêmes précautions lorsque vous utilisez des variables avec étendue au niveau de l'application. Utilisez-les soigneusement. Les propriétés, collections, méthodes et événements de l'objet Application ASP sont décrits dans le résumé de l'objet Application. |
Commentaires/Dépannage | |
Les variables au niveau de l'application sont en réalité des variables globales pour votre application ASP. L'utilisation d'éléments globaux dans les applications ASP doit être considérée avec la même précaution que l'utilisation d'éléments globaux dans les applications autonomes traditionnelles, sinon plus. L'étape la plus importante consiste à évaluer sa portée avant de mettre en œuvre tout objet ou variable avec une étendue au niveau de l'application. En fait, rares sont les instances où vous devez utiliser ces variables globales ASP. Cela dit, vous devez les utiliser dans certains cas pour créer des applications ASP fonctionnelles. Par exemple, pour maintenir les statistiques spécifiques à l'application pour votre site Web. Ainsi, grâce aux variables au niveau de l'application, augmentant d'une unité au début de chaque session utilisateur, vous pouvez maintenir le compte des clients qui ont utilisé votre application. Les outils de gestion Web, tels que Microsoft Site Server, exécutent des tâches similaires, mais qui sont plus tournées vers les fichiers que vers l'application. Vous trouverez dans certaines documentations ASP des indications d'utilisation d'objets au niveau de l'application pour la maintenance de connexions de base de données ADO (ActiveX Data Objects) ouvertes pour tous les utilisateurs de l'application. (Pour plus d'informations sur ADO, voir le chapitre 12.) Cela n'est pas une bonne utilisation des variables au niveau de l'application, car cette méthode empêche ODBC de réutiliser les connexions par pages séparées. (Vous pouvez, toutefois, utiliser une variable au niveau de l'application pour maintenir une chaîne de connexion spécifique à l'application pour cette même connexion à la base de données.) La mise en commun de connexions ODBC fournit une méthode de réutilisation des connexions ODBC par d'autres utilisateurs. Au lieu de créer une connexion à chaque fois qu'un client en requiert une, le serveur s'applique à réutiliser une connexion existante qui n'est plus utilisée. Les connexions ODBC éventuellement en mémoire pendant une certaine période de temps (configurée au niveau de la carte MMC), sont détruites pour libérer de la mémoire. Toutefois, vous devez tenir compte de la difficulté suivante lorsque vous envisagez d'utiliser des variables et objets au niveau de l'application. Prenez l'exemple suivant. Vous disposez de deux répertoires physiques : Enfin, notez que IIS vous autorise désormais à définir des applications ASP dans différents espaces de mémoire d'application et de serveur Web en sélectionnant une option dans le panneau Propriétés d'un répertoire virtuel donné sur la console de gestion Microsoft Management Console d'IIS. Cela représente une amélioration considérable dans IIS. Si votre application ASP s'exécute dans un espace de mémoire distinct du serveur Web, et qu'un objet de serveur (ou le moteur de script) subit une panne, le serveur Web ou les autres applications ASP n'en souffriront pas. |
Collection Contents | |
Application.Contents.Item("Pi") = 3.14 | |
La collection Contents de l'objet Application contient les variables à étendue au niveau de l'application et les objets ajoutés à l'application en cours à l'aide de scripts (non pas à l'aide de la balise <OBJECT>). Avant de vous pencher sur la procédure d'ajout des éléments à la collection Contents, vous devez comprendre les propriétés de la collection. La collection Contents comprend trois propriétés :
|
|
Remarques | |
Vous pouvez initialiser des variables au niveau de l'application et ajouter ainsi des éléments à la collection Contents de deux manières. En premier lieu, vous pouvez initialiser des variables Application dans la procédure d'événement Application_OnStart du fichier Initialisation de variables au niveau de l'application dans GLOBAL.ASA ' < FROM GLOBAL.ASA > ' This code resides in the GLOBAL.ASA file at the ' root of the current application. ' See Chapter 11 for more details on the GLOBAL.ASA file. Sub Application_OnStart Application.Contents.Item("STATE_FIRST") = "California" Application.Contents("STATE_SECOND") = "Oregon" Application("STATE_THIRD") = "Washington" End Sub Le code dans l'exemple 4.1 permet de créer trois variables d'étendue application, ajoutant ainsi trois éléments à la collection Contents. Notez que ces variables seront instanciées et initialisées uniquement au démarrage de l'application, et non à chaque visite au site des utilisateurs qui suivent. Ces variables conservent les mêmes valeurs sauf si un autre script les modifie pour toutes les pages et tous les utilisateurs. Le code précédent ajoute des éléments à la collection Contents à l'aide d'une clé. Vous pouvez également ajouter des éléments à la collection à l'aide d'une valeur de type index, comme dans cet exemple : Application.Contents(1) = "California" Toutefois, vous devez ajouter des éléments à une collection à l'aide d'une clé ou d'un index, mais pas des deux. Si vous ajoutez des éléments à l'aide des deux méthodes, les éléments avec une clé remplaceront les éléments de position inférieure auxquels vous n'avez pas attribué de clé. Vous pouvez également créer des variables d'étendue application et par la même occasion ajouter des éléments à la collection Contents à l'intérieur de tout script sur toute page. Toutefois, notez que les variables ainsi créées sont créées et maintenues sur l'application entière et sur tous les utilisateurs. L'exemple 4.2 illustre cette méthode d'initialisation de variables d'étendue application. Initialisation de variables au niveau de l'application dans un script côté serveur <% ' This code exists in the server-side section of a script ' on the web site. Application.Contents.Item("STATE_FOURTH") = "New York" Application.Contents("STATE_FIFTH") = "New Jersey" Application("STATE_SIXTH") = "Vermont" %> Le code dans l'exemple 4.2 ajoute trois autres variables d'étendue application à l'application. Notez que ces variables seront réinitialisées chaque fois qu'un utilisateur demande la page contenant ce code. Pour éviter cette perte de ressources au niveau du processeur, envisagez d'exécuter cette initialisation à l'aide de code similaire à celui indiqué ci-dessous : <% ' A more efficient example of the creation of an ' application-scoped variable. If IsEmpty(Application.Contents.Item(STATE_SEVENTH)) Then Application.Contents(STATE_SEVENTH) = "Texas" End If %> Ce code permet de créer une septième variable d'application pour l'application en cours uniquement si elle n'a pas déjà été créée. La collection Contents prend en charge les constructions For Each et For...Next pour l'itération de la collection, comme indiqué à l'exemple 4.3 . Utilisation de l'élément For Each avec la collection Contents <% For Each strKey in Application.Contents %> The next item in Application's Contents collection<BR> has <%= strKey %> as its key and <%= Application.Contents(strKey) %> as its value.<P> <% Next %> Notez, toutefois, que contrairement à la plupart des objets de collection, la collection Contents ne prend pas en charge la méthode Add, et que jusqu'à la version IIS 5.0, elle ne prenait pas en charge la méthode Remove. Si elles ne sont pas explicitement supprimées, les variables auxquelles vous attribuez une étendue application restent en résidence jusqu'à l'arrêt du serveur Web ou la temporisation de la dernière session utilisateur. Si vous ajoutez un objet à la collection Contents de l'application, assurez-vous que le modèle de thread pour l'objet prend en charge son utilisation dans une étendue. Il est recommandé d'utiliser le modèle de thread libre. Pour plus de détails sur l'utilisation des différents modèles de thread dans les composants de serveur IIS, consultez l'ouvrage de Shelley Powers, Les applications avec modèle de thread libre autorisent plusieurs processus utilisateur à accéder simultanément à la même instance du composant. Pour accéder aux propriétés ou méthodes d'un objet à étendue application, utilisez une extension de la syntaxe indiquée précédemment pour accéder à la valeur d'une variable à étendue application, comme illustré dans le fragment de code suivant : ' In this example, assume you have an application-scoped Ad ' Rotator variable called MyAdRot. ' Accessing a property: intBorder = Application.Contents("MyAdRot").Border ' Executing a method: Application.Contents("MyAdRot").GetAdvertisement("Sched.txt") Si vous envisagez d'utiliser un objet donné dans une transaction utilisant l'objet ObjectContext, n'attribuez pas une étendue application ou session à cet objet. Les objets utilisés dans les transactions sont détruits à la fin de la transaction et toute référence ultérieure à leurs propriétés ou appels à leurs méthodes entraîneront une erreur. Lorsque vous ajoutez un tableau à la collection Contents de l'objet Application, il est recommandé d'ajouter le tableau entier comme une seule entité. Lorsque vous modifiez un élément dans le tableau, extrayez une copie du tableau, modifiez l'élément, puis ajoutez le tableau à la collection Contents en entier de nouveau. Le code dans l'exemple 4.4 illustre cette technique. Utilisation des tableaux dans la collection Contents <% ' Create an array variable and add it to Contents collection. ReDim arystrNames(3) arystrNames(0) = "Chris" arystrNames(1) = "Julie" arystrNames(2) = "Vlad" arystrNames(3) = "Kelly" Application("arystrUserNames") = arystrNames %> The second name in the User Names array is <%= Application("arystrUserNames")(1) %> <BR> <% ' Change an element of the array being held in the ' Contents collection. Dim arystrNamesLocal arystrNamesLocal = Application("arystrUserNames") arystrNamesLocal(1) = "Mark" Application("arystrUserNames") = arystrNamesLocal ' The second name is now Mark. %> Now, the second name in the User Names array is <%= Application("arystrUserNames")(1) %> <BR> |
|
Remove | |
Application.Contents.Remove(Key|Index) | |
Supprime un membre spécifique de la collection Contents. De plus, dans IIS 5.0, la méthode Remove vous permet de supprimer de la mémoire une variable spécifique de la collection Contents de l'application, sans pour autant supprimer les autres variables. |
|
Paramètres | |
|
|
Exemple | |
Le script suivant supprime deux membres de la collection Contents : <% ' This script assumes you have set up two greeting salutations for all ' the members of your site based on time of day. You want to now ' remove these from your site. strAppMorningGreeting = Application("strAMGreet") strAppEveningGreeting = Application("strPMGreet") . . . Application.Contents.Remove("strAMGreet") Application.Contents.Remove("strPMGreet") . . . %> |
|
Remarques | |
La méthode Remove représente un atout majeur dans la collection Contents, car elle permet de mieux contrôler et nettoyer la mémoire. Vous pouvez supprimer de la mémoire certains éléments de la collection sans quitter la session utilisateur. Comme mentionné précédemment dans la section de la propriété Item de la collection Contents, il est important d'utiliser une clé de type chaîne au lieu d'un index lorsque vous appelez la méthode Remove. L'index d'un élément risque de changer pendant la durée de vie de l'application, entraînant des résultats inattendus lorsque vous appelez la méthode Remove en utilisant une valeur d'index stockée. La méthode Remove de la collection Contents de l'application vous permet de supprimer des membres de la collection Contents, sans décharger l'application Web entière, via l'interface d'administration du serveur Web IIS. L'absence de cette fonction dans les versions antérieures à IIS 5.0 était une source de difficultés de gestion des variables à étendue application. |
|
RemoveAll | |
Application.Contents.RemoveAll | |
Supprime tous les membres de la collection Contents. De plus, dans IIS 5.0, la méthode RemoveAll vous permet de supprimer de la mémoire toutes les variables à étendue application sans décharger l'application. |
|
Paramètres | |
Aucun |
|
Exemple | |
Le script suivant supprime tous les membres de la collection Contents : <% ' This script assumes you have set up two greeting salutations for all ' the members of your site based on time of day. You want to now remove ' these from your site. strAppMorningGreeting = Application("strAMGreet") strAppEveningGreeting = Application("strPMGreet") . . . Application.Contents.RemoveAll . . . %> |
|
Remarques | |
Comme la méthode Remove, la méthode RemoveAll représente un atout majeur dans la collection Contents, car elle permet de mieux contrôler et nettoyer la mémoire. Elle permet de supprimer toutes les variables à étendue application sans décharger l'application. |
|
StaticObjects | |
<OBJECT RUNAT=Server SCOPE=Application ID=AppInfo2 PROGID="MSWC.MyInfo"> </OBJECT> | |
La collection StaticObjects contient tous les objets ajoutés à l'application à l'aide de la balise <OBJECT>. Vous pouvez utiliser la propriété Item (traitée plus loin) de la collection StaticObjects pour extraire les propriétés d'un objet spécifique dans la collection. Vous pouvez également utiliser cette propriété de la collection Vous pouvez ajouter des objets à cette collection uniquement en utilisant la balise <OBJECT> du fichier <OBJECT RUNAT=Server SCOPE=Application ID=AppInfo2 PROGID="MSWC.MyInfo"> </OBJECT> Vous ne pouvez pas ajouter d'objets à cette collection ailleurs dans votre application ASP. La collection StaticObjects, comme les autres collections ASP, a les propriétés suivantes :
Pour plus d'informations sur les propriétés Item, Key et Count d'une collection, voir Collection Contents, plus haut dans le présent chapitre. |
|
Exemple | |
' < FROM GLOBAL.ASA > ' This code resides in the GLOBAL.ASA file at the root ' of the current application. The following <OBJECT> ' tag is processed only once for the current application. ' See Chapter 11 for more details on the GLOBAL.ASA file. <OBJECT RUNAT=Server SCOPE=Application ID=AppInfo1 PROGID="MSWC.MyInfo"> </OBJECT> ' <> <% ' The following code initializes the AppInfo1 component. ' This initialization code can reside anywhere. AppInfo1.PersonalName = "Gertrude Stein" AppInfo1.PersonalAddress = "233 Main Street" ' The following code uses the StaticObjects collection ' of the Application object to retrieve the value ' of the PersonalName property of AppInfo1. For Each objInfo In Application.StaticObjects %> The personal name is <BR> <%= Application.StaticObjects(objInfo).PersonalName%><P> <% Next %> There are <%= Application.StaticObjects.Count %> items in the Application's StaticObjects collection. |
|
Remarques | |
La collection StaticObjects vous permet d'accéder à tout objet instancié avec étendue au niveau de l'application à l'aide une balise <OBJECT>. Les objets instanciés en utilisant la méthode de serveur CreateObject ne sont pas accessibles via cette collection. La nomenclature ici peut prêter à confusion. En résumé : la collection StaticObjects contient les objets serveur instanciés via l'utilisation de la balise <OBJECT>, et non via la méthode CreateObject de l'objet Server. L'exemple StaticObjects dans la documentation IIS 4.0 de Microsoft suggère que si vous itérez à travers cette collection, vous pourrez référencer chaque propriété. Cette information est quelque peu inexacte, car elle suggère que la collection représente toutes les propriétés des objets plutôt que les objets eux-mêmes. Si vous voulez accéder aux propriétés ou aux méthodes des objets dans la collection StaticObjects, vous devez utiliser l'opérateur point, en dehors des parenthèses autour de la propriété Key, suivi du nom de la propriété ou de la méthode, comme indiqué dans l'exemple précédent. Les objets créés dans le fichier N'attribuez pas d'étendue application ou session à un objet utilisé dans une transaction avec l'objet ObjectContext. Les objets utilisés dans les transactions sont détruits à la fin de la transaction et toutes les références ultérieures à leurs propriétés ou appels à leurs méthodes entraîneront une erreur. |
|
Lock | |
Application.Lock | |
La méthode Lock verrouille l'objet Application, empêchant tout autre client d'apporter des modifications aux valeurs des variables dans la collection Contents (il ne s'agit pas ici seulement des variables que vous modifiez avant d'appeler la méthode Unlock). La méthode Unlock correspondante est utilisée pour libérer l'objet Application afin que d'autres clients puissent de nouveau modifier les valeurs de variables de la collection Contents. Si vous n'utilisez pas la méthode Unlock, IIS déverrouille automatiquement la variable à la fin du script Active Server Pages en cours ou au moment de la temporisation du script, si celle-ci se produit avant. La temporisation du script ASP est réglable à travers la page Properties du site Web à l'aide de la console de gestion Microsoft Management Console. La valeur par défaut est de 120 secondes. |
|
Paramètres | |
Aucun |
|
Exemple | |
<% ' This script exists on the second page of a ' multipage ASP application, so that users may ' or may not visit it. The example shows how you could ' see how many visitors the page has had. ' Assume that TotalNumPage2 starts at 0. ' Lock the Application object. Application.Lock intNumVisits = Application.Contents("TotalNumPage2") intNumVisits = intNumVisits + 1 Application.Contents("TotalNumPage2") = intNumVisits ' Explicitly unlock the Application object. Application.Unlock ' NOTE: Using the PageCnt.DLL would be a more ' efficient manner of doing this. %> <HTML> <HEAD><TITLE>Home Page</TITLE></HEAD> <BODY BGCOLOR = #ffffcc> Welcome to our homepage. You are client number <%= Application.Contents("TotalNumPage2")%> to our site. Thank you for your patronage. </BODY> </HTML> |
|
Remarques | |
Tout client connecté à votre serveur Web peut appeler un script capable de modifier la valeur d'une variable dans la collection Contents de l'application. Par conséquent, il est judicieux d'utiliser les méthodes Lock et Unlock chaque fois que vous faites une référence à ou que vous modifiez une variable dans la collection Contents. Cela évite toute éventualité de tentative de modification de la valeur d'une variable par un client, alors qu'un autre client est en train de résoudre cette même valeur de variable. Gardez à l'esprit que vous ne pouvez pas créer une variable en lecture seule en utilisant un appel à la méthode Lock sans un appel correspondant à la méthode Unlock, car IIS déverrouille automatiquement l'objet Application. Vous n'êtes pas obligé d'appeler les méthodes Lock et Unlock dans la procédure d'événement Application_OnStart (voir les références sur les événements dans ce chapitre pour plus d'informations sur l'événement Application_OnStart). L'événement Application_OnStart se produit une seule fois, quel que soit le nombre de sessions éventuellement initiées. La première requête du client est la seule à déclencher l'événement Application_OnStart. Par conséquent, ce client est le seul à pouvoir modifier la valeur de la variable d'application spécifique. De plus, aucune autre requête de client ne sera traitée jusqu'à la fin du code Application_OnStart. |
|
Unlock | |
Application.Unlock | |
La méthode Unlock libère les variables d'application d'un appel de méthode Lock. Une fois la méthode Unlock appelée, les autres clients peuvent de nouveau modifier les valeurs des variables dans la collection Contents de l'application. Si vous appelez la méthode Lock, et que vous n'appelez pas la méthode Unlock correspondante, IIS déverrouille automatiquement les variables dans la collection Contents de l'application à la fin de la page ASP active ou au moment de la temporisation du script, si celle-ci se produit la première. |
|
Paramètres | |
Aucun |
|
Exemple | |
Voir l'exemple concernant Application.Lock. |
|
Remarques | |
Voir les remarques concernant Application.Lock. |
|
OnEnd | |
Application_OnEnd | |
L'événement Application_ OnEnd est déclenché au moment du déchargement de l'application ASP du serveur Web (à l'aide de la console de gestion Microsoft Management Console) ou lorsque l'application est accidentellement arrêtée (par exemple, si le service Web est interrompu sur le serveur Web). L'événement Application_OnEnd n'est appelé qu'une seule fois par application. Le code correspondant à cette procédure d'événement est localisé dans le fichier |
|
Paramètres | |
Aucun |
|
Exemple | |
' < FROM GLOBAL.ASA > ' This code resides in the GLOBAL.ASA file at the ' root of the current application. The following ' procedure is processed only once for the current ' application. ' See Chapter 11 for more details on the GLOBAL.ASA file. <SCRIPT LANGUAGE="VBScript" RUNAT=Server> Sub Application_OnEnd ' This code will run on the server when ' the application stops. ' This code saves the final count of an application ' use counter to a file. Set filsysObj1 = _ CreateObject("Scripting.FileSystemObject") Set tsObj1 = filsysObj1.CreateTextFile("c:\usrcount.txt", _ True) tsObj1.WriteLine(Application.Contents("AppUserCount")) tsObj1.Close End Sub </SCRIPT> ' <> |
|
Remarques | |
L'utilisation de l'événement Application_OnEnd est délicate. La documentation de Microsoft suggère que l'événement OnEnd est déclenché lorsqu'il ne reste plus de sessions actives. Cela n'est pas toujours le cas. L'événement OnEnd s'exécute uniquement lorsque le service Web est interrompu ou lorsque l'administrateur décharge explicitement l'application depuis la mémoire du serveur Web (en utilisant la carte MMC). Vous ne pouvez pas être sûr que cet événement ne sera pas appelé depuis votre application accidentellement ou sans intervention directe de votre part. Aussi, vous devez considérer avec soin toutes les implications possibles avant d'utiliser les différentes variables au niveau de l'application. Vous ne pouvez pas utiliser la méthode MapPath de l'objet Server (voir le chapitre 9 pour plus d'informations sur l'objet Server) pour mapper un répertoire relatif ou virtuel à un répertoire physique au sein de la procédure d'événement Application_OnEnd. Microsoft n'indique pas la raison de cette limitation qui pourrait émaner du domaine de la sécurité. |
|
OnStart | |
Application_OnStart | |
L'événement Application_OnStart est déclenché lorsque la première requête du client est reçue. L'événement Application_OnStart n'est appelé qu'une seule fois par application. Le code correspondant à cette procédure d'événement est localisé dans le fichier |
|
Paramètres | |
Aucun |
|
Exemple | |
' < FROM GLOBAL.ASA > ' This code resides in the GLOBAL.ASA file at the ' root of the current application. The following ' procedure is processed only once for the current ' application. ' See Chapter 11 for more details on the GLOBAL.ASA file. <SCRIPT LANGUAGE="VBScript" RUNAT=Server> Sub Application_OnStart ' This code will run on the server when ' the application starts. ' This code retrieves the last final user count ' and uses it to initialize an Application ' variable. Set filsysObj1 = CreateObject("Scripting.FileSystemObject") Set tsObj1 = filsysObj1.OpenTextFile("c:\usrcount.txt", _ True) Application.Contents("AppUserCount") = tsObj1.ReadAll tsObj1.Close End Sub </SCRIPT> ' <> |
|
Remarques | |
La procédure d'événement Application_OnStart, si elle est présente, est le premier code exécuté sur le serveur pour une application Active Server Pages donnée. Par conséquent, il s'agit du meilleur emplacement pour initialiser les variables au niveau de l'application. L'exécution d'un autre code dans votre application ASP n'est pas garantie. Considérez soigneusement l'utilisation de variables au niveau de l'application. Chaque variable avec étendue d'application que vous configurez et initialisez dans l'événement Application_OnStart continue à occuper de la mémoire sur le serveur jusqu'à la fin de l'application. |
|