Compartir a través de


Trabajar con instancias de HttpApplication

Durante la vida útil de su aplicación, ASP.NET mantiene un grupo de instancias de HttpApplication derivadas de Global.asax. Cuando su aplicación recibe una solicitud HTTP, el marco de trabajo de páginas ASP.NET asigna una de estas instancias para procesar dicha solicitud. Esta instancia de HttpApplication en particular es responsable de administrar toda la duración de la solicitud a la que está asignada y la instancia sólo puede reutilizarse una vez completada la solicitud.

A través de la clase HttpApplication puede tener acceso mediante programación a los métodos HttpApplication.Init y HttpApplication.Dispose, así como a los eventos Application_OnStart y Application_OnEnd. También tiene acceso a todos los eventos expuestos por cualquier HttpModule.

Reemplazar los métodos Init y Dispose

Llame al método HttpApplication.Init inmediatamente después de crear una instancia de la clase HttpApplication. Puede utilizar este método para crear y configurar cualquier objeto que desee utilizar en todos los eventos de control, como se muestra en el ejemplo siguiente.

<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>

El método Init es diferente al evento Application_OnStart porque siempre se le llama en todas las instancias de HttpApplication dentro de una aplicación. Application_OnStart sólo se inicia una vez durante la vida útil de la aplicación, en la primera instancia de HttpApplication. Utilice Application_OnStart únicamente para crear o modificar estados compartidos por todas las instancias de canalizaciones, como el uso del objeto ApplicationState. No lo utilice para crear variables locales, ya que varias instancias de HttpApplication no comparten dichas variables. Llame al método HttpApplication.Dispose inmediatamente antes de destruir una instancia de la clase HttpApplication. Puede utilizarlo para limpiar los recursos locales.

El método Dispose es diferente al evento Application_OnEnd porque siempre se le llama en todas las instancias de HttpApplication dentro de una aplicación. Application_OnEnd sólo se inicia una vez durante la vida útil de la aplicación, en la última instancia de HttpApplication que deja de utilizarse. Utilice Application_OnEnd únicamente para limpiar estados o recursos compartidos por todas las instancias de canalizaciones, como el uso del objeto ApplicationState. No lo utilice para limpiar variables locales, ya que varias instancias de HttpApplication no comparten dichas variables.

No puede utilizar las propiedades Request, Response y Session de una instancia de HttpApplication durante la fase Init o Dispose de la ejecución de la solicitud.

En el siguiente ejemplo se muestra cómo reemplazar los dos métodos de ciclo de vida proporcionados por la clase 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>

Controlar eventos de HttpApplication

Puede utilizar el archivo Global.asax para sincronizar cualquier evento expuesto por la clase base HttpApplication. Para ello, debe utilizar el siguiente modelo de nomenclatura cuando cree métodos:

Application_EventName(AppropriateEventArgumentSignature)

Por ejemplo, si desea crear código que responda a los eventos OnStart, BeginRequest y OnEnd de su aplicación, el código que incluya en el archivo Global.asax puede ser similar al siguiente.

<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>

Vea también

Archivo Global.asax | HttpApplication (Clase) | HttpApplication.Init | HttpApplication.Dispose