Partager via


Utilisation des instances HttpApplication

Pendant la durée de vie de votre application, ASP.NET conserve un pool d'instances HttpApplication dérivées de Global.asax. Lorsque votre application reçoit une demande HTTP, l'infrastructure de page ASP.NET assigne l'une de ces instances pour traiter cette demande. Cette instance HttpApplication particulière est chargée de gérer l'intégralité de la durée de vie de la demande à laquelle elle est assignée ; l'instance ne peut être réutilisée qu'une fois la demande terminée.

C'est par l'intermédiaire de la classe HttpApplication que vous avez accès par programme aux méthodes HttpApplication.Init et HttpApplication.Dispose, ainsi qu'aux événements Application_OnStart et Application_OnEnd. Vous avez aussi accès aux événements exposés par un module HttpModule quelconque.

Substitution des méthodes Init et Dispose

Vous appelez la méthode HttpApplication.Init immédiatement après avoir créé une instance de la classe HttpApplication. Vous pouvez employer cette méthode pour créer et configurer un objet que vous souhaitez utiliser dans tous les événements de gestion, comme le montre l'exemple suivant.

<script language="VB" runat="server">
      Public Overrides Sub Init()
         'Insert something interesting here.
      End Sub
</script>
[C#]
<script language="C#" runat="server">
      public override void Init() {
         // Insert something interesting here.
      }
</script>

La méthode Init est différente de l'événement Application_OnStart car elle est systématiquement appelée sur toutes les instances HttpApplication dans une application. Application_OnStart est déclenché une seule fois pendant la durée de vie d'une application, sur la première instance de HttpApplication. Utilisez Application_OnStart uniquement pour créer ou modifier les états partagés par toutes les instances de pipeline, comme l'utilisation de l'objet ApplicationState. Ne l'utilisez pas pour créer des variables locales car celles-ci ne sont pas partagées par plusieurs instances HttpApplication. Appelez la méthode HttpApplication.Dispose immédiatement après avoir détruit une instance de la classe HttpApplication. Vous pouvez l'utiliser pour nettoyer toutes les ressources locales.

La méthode Dispose est différente de l'événement Application_OnEnd car elle est systématiquement appelée sur toutes les instances HttpApplication dans une application. Application_OnEnd est déclenché une seule fois pendant la durée de vie d'une application, sur la dernière instance de HttpApplication qui est détruite. Utilisez Application_OnEnd uniquement pour nettoyer les états ou les ressources partagés par toutes les instances de pipeline, comme l'utilisation de l'objet ApplicationState. Ne l'utilisez pas pour nettoyer les variables locales car celles-ci ne sont pas partagées par plusieurs instances HttpApplication.

Vous ne pouvez pas utiliser les propriétés Request, Response et Session d'une instance HttpApplication pendant les étapes Init ou Dispose de l'exécution de la demande.

L'exemple suivant illustre comment vous pouvez substituer les deux méthodes du cycle de vie fournies par la classe de base HttpApplication.

<script language="VB" runat=server>
   Public Overrides Sub Init()
      ' Init override code goes here.
   End Sub
   Public Overrides Sub Dispose()
      ' Init override code goes here.
   End Sub
</script>
[C#]
<script language="C#" runat=server>
   public override void Init() {
      // Init override code goes here.
   }
   public override void Dispose() {
      // Init override code goes here.
   }
</script>

Gestion des événements HttpApplication

Vous pouvez utiliser le fichier Global.asax pour synchroniser tout événement exposé par la classe de base HttpApplication. Pour cela, vous devez utiliser le modèle suivant d'affectation de nom aux méthodes d'auteur :

Application_EventName(AppropriateEventArgumentSignature)

Par exemple, si vous souhaitez du code qui réponde aux événements OnStart, BeginRequest et OnEnd de votre application, le code que vous incluez dans le fichier Global.asax pourrait avoir l'apparence suivante.

<Script language="VB" runat="server">
     Sub Application_OnStart()
         'Application start-up code goes here.
     End Sub
     Sub Application_BeginRequest()
         'Application code for each request could go here.
     End Sub
     Sub Application_OnEnd()
         'Application clean-up code goes here.
     End Sub
</script>
[C#]
<Script language="C#" runat="server">
     public void Application_OnStart() {
         // Application start-up code goes here.
     }
     public void Application_BeginRequest() {
         // Application code for each request could go here.
     }
     public void Application_OnEnd() {
         // Application clean-up code goes here.
     }
</script>

Voir aussi

Global.asax, fichier | HttpApplication, classe | HttpApplication.Init | HttpApplication.Dispose