Información general sobre el estado de aplicación de ASP.NET

Actualización: noviembre 2007

El estado de aplicación es un repositorio de datos disponible para todas las clases de una aplicación ASP.NET. El estado de aplicación se almacena en la memoria del servidor y ofrece más rapidez que el almacenamiento y la recuperación de información de una base de datos. A diferencia del estado de sesión, que es específico de las sesiones de un solo usuario, el estado de aplicación se aplica a todos los usuarios y a todas las sesiones. Por consiguiente, el estado de aplicación es un lugar útil para almacenar pequeñas cantidades de datos utilizados a menudo que no cambian de un usuario a otro. Para obtener información sobre cómo guardar los datos basándose en los usuarios, vea Información general sobre el estado de sesión de ASP.NET e Información general sobre las propiedades de perfil de ASP.NET.

Utilizar el estado de aplicación

El estado de aplicación se almacena en una instancia de la clase HttpApplicationState. Esta clase expone un diccionario de objetos con valores y claves.

La instancia de HttpApplicationState se crea la primera vez que el usuario tiene acceso a cualquier recurso de dirección URL de la aplicación. A la clase HttpApplicationState se suele tener acceso a través de la propiedad Application de la clase HttpContext.

El estado de aplicación se puede utilizar de dos maneras. Puede agregar o quitar valores de la colección Contents, u obtener acceso a ellos, directamente a través del código. A la clase HttpApplicationState se puede tener acceso en cualquier momento durante la vida de la aplicación. Sin embargo, suele ser útil cargar los datos del estado de aplicación cuando se inicia la aplicación. Para ello, puede colocar código para cargar el estado de aplicación en el método Application_Start del archivo Global.asax. Para obtener más información, vea Información general sobre el ciclo de vida de una aplicación ASP.NET para IIS 5.0 y 6.0.

Opcionalmente, puede agregar objetos a la colección StaticObjects a través de una declaración <object > en el archivo Global.asax de la aplicación Web. Se puede tener acceso al estado de aplicación definido de esta manera desde el código situado en cualquier lugar de la aplicación. En el ejemplo siguiente se muestra la declaración de un objeto para un valor de estado de aplicación:

<object  scope="application" ID="MyInfo" 
    PROGID="MSWC.MYINFO">
</object>

Los objetos sólo se pueden agregar a la colección StaticObjects en el archivo Global.asax. Si intenta agregarlos directamente a través del código, la colección producirá una excepción NotSupportedException.

Puede tener acceso a los miembros de los objetos almacenados en el estado de aplicación sin tener que hacer referencia a la colección Application. En el ejemplo de código siguiente se muestra cómo hacer referencia a un miembro de un objeto definido en la colección StaticObjects del estado de aplicación:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Label1.Text = MyInfo.Title
End Sub
protected void Page_Load(Object sender, EventArgs e)
    Label1.Text = MyInfo.Title;
End Sub

Consideraciones sobre el estado de aplicación

Cuando utilice el estado de aplicación, debe tener en cuenta las consideraciones importantes siguientes:

  • Recursos   Dado que se almacena en memoria, el estado de aplicación es muy rápido comparado con el almacenamiento de los datos en un disco o en una base de datos. Sin embargo, si se almacenan grandes bloques de datos en el estado de aplicación, se puede llenar la memoria del servidor, haciendo que éste tenga que guardar páginas de memoria en el disco. Como alternativa al uso del estado de aplicación, puede utilizar el mecanismo de almacenamiento en memoria caché de ASP.NET para almacenar grandes cantidades de datos de la aplicación. La caché de ASP.NET también almacena los datos en memoria y, por lo tanto, es muy rápida. Sin embargo, ASP.NET administra activamente la caché y quitará elementos cuando la memoria sea escasa. Para obtener más información, vea Información general sobre el almacenamiento en caché en ASP.NET.

  • Volatilidad   Dado que el estado de aplicación se almacena en la memoria del servidor, se pierde cada vez que se detiene o se reinicia la aplicación. Por ejemplo, si se modifica el archivo Web.config, se reiniciará la aplicación y se perderá todo el estado de aplicación a menos que los valores de estado de aplicación se hayan escrito en un medio de almacenamiento no volátil, por ejemplo una base de datos.

  • Escalabilidad   El estado de aplicación no se comparte entre múltiples servidores que sirven la misma aplicación, como en una batería de servidores Web, ni entre múltiples procesos de trabajo que sirven la misma aplicación en el mismo servidor, como en un hospedaje multiproceso en un único equipo. Por lo tanto, la aplicación no puede depender del estado de aplicación que contiene los mismos datos para el estado de aplicación a través de servidores o procesos diferentes. Si la aplicación se va a ejecutar en entornos de multiprocesador o multiservidor, puede utilizar una opción más escalable, como una base de datos, para los datos que deban conservarse idénticos durante toda la ejecución de la aplicación.

  • Concurrencia   El estado de aplicación es de subprocesamiento libre, lo que significa que varios subprocesos pueden tener acceso a los datos al mismo tiempo. Por consiguiente, es importante asegurarse de que al actualizar los datos del estado de aplicación se haga de una manera segura para subprocesos incluyendo la compatibilidad con la sincronización integrada. Puede utilizar los métodos Lock y UnLock para garantizar la integridad de los datos bloqueándolos de manera que sólo un origen pueda escribir datos cada vez. También puede reducir la posibilidad de que surjan problemas de concurrencia inicializando los valores del estado de aplicación en el método Application_Start del archivo Global.asax. Para obtener más información, vea Información general sobre el ciclo de vida de una aplicación ASP.NET para IIS 5.0 y 6.0.

Vea también

Tareas

Cómo: Guardar valores en un estado de aplicación

Cómo: Leer los valores de un estado de aplicación

Conceptos

Información general sobre la administración de estados de ASP.NET

Otros recursos

Novedades de la administración de estados de ASP.NET