Freigeben über


ASP.NET: Usar variables globales en una Web Farm

¿Podemos usar variables globales dentro de una misma aplicación desplegada en una Web Farm?

Antes deberíamos entender cómo funcionan las variables globales y dónde se almacenan. Las variables de un proceso se almacenan en la memoria del propio proceso, teniendo en cuenta que cada región de memoria de un proceso sólo es accedida por el mismo proceso, no es posible que un proceso pueda leer variables almacenadas en otro proceso.

Si la ejecución de la aplicación se hiciese en dos Working Processes (w3wp.exe) diferentes en una misma máquina, no sería posible que esos dos procesos compartiesen las mismas variables pese a estar ejecutando la misma aplicación en el mismo servidor. Tal y como hemos comentado antes, las variables se almacenan en la memoria de los procesos.

Además, deberíamos tener en cuenta que por el propio aislamiento que hace ASP.NET en sus procesos, dentro de un mismo Working Process, cada aplicación configurada en IIS, se ejecuta en su propio Application Domain que está completamente aislado de los demás.

Por lo que el uso de variables globales compartidas en diferentes nodos de una Web Farm se hace completamente imposible.

Podemos intentar plantear otras soluciones pero debemos entender el motivo exacto por el que se están utilizando estas variables para ahorrar los accesos a base de datos.

Si son valores relativos sólo al usuario, os recomendaría que usaseis sesiones de usuario con Session State Server o en SQL Server.

Existen otras alternativas para almacenar valores que se van a utilizar muchas veces como pueden ser los valores estáticos o cachear los objetos de ASP.NET(https://msdn.microsoft.com/en-us/library/xsbfdd8c(v=vs.100).aspx), dependiendo del uso que se vayan a hacer sobre los objetos.

Espero que os sirva de ayuda.

- José Ortega Gutiérrez