viernes, 9 de noviembre de 2012

ASP.NET - Configuración Session Mode

Hoy en areaTIC trataremos los modos de almacenamiento de la información de una sesión ASP.NET.

En este otro artículo vimos a modo introducción las diferentes alternativas que ASP.NET ofrece para mantener cierta información y hacer que persista entre varias peticiones http de un mismo cliente.

En este caso veremos como configurar Session Mode con el modo de almacenamiento de la información de sesión que nos interese en cada caso para evitar posibles problemas y optimizar el rendimiento del site.

Los diferentes modos de session que nos ofrece ASP.NET están contenidos en la enumeración System.Web.SessionState.SessionStateMode y son los siguientes:
  • InProc (defecto): Es la opción que ASP.NET usará por defecto para almacenar la información relacionada con los objetos de session que estemos usando en nuestro site. Este modo de almacenamiento usa la memória RAM de la máquina servidor en la que está alojada el site.

  • StateServer: Delegamos el trabajo relacionado con la gestión de la sesión a un servicio windows de un servidor remoto o local.

  • SQLServer: Permite definir una base de datos SQLServer para almacenar la información relacionada con los objetos de sesión.

  • Custom: Permite personalizar el modo de sesión.

  • Off: Deshabilita el uso de objetos Session en nuestro site.

Para modificar el modo de sesión que ASP.NET plantea por defecto hemos de añadir el siguiente tag al archivo web.config en la sección <System.Web>
<sessionState mode="InProc"/>
En la mayoría de situaciones usando el modo InProc, por defecto, no deberíamos tener problemas aunque se podría dar el caso que almacenemos mucha información en objetos de sesión y/o tengamos muchos usuarios concurrentes, esto podría originar que se supere la RAM asignada para tal propósito en el servidor con lo cual se reiniciaría la sesión de los usuarios y se perdería toda la información asociada. En este tipo de escenarios es recomendable modificar SessionMode para delegar la gestión de los objetos de sesión a una base de datos o bien un servicio. Veamos como hacerlo:

SQLServer :
<sessionState mode="SQLServer" sqlConnectionString ="...">
    </sessionState>
Si delegamos la gestión a una base de datos SQLServer es necesario tener instalado mínimo un SQLServerExpress e indicar la cadena de conexión del servidor. A modo opcional también podríamos definir los atributos sqlCommandTimeout y sqlRetryInteval.

StateServer:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" />
En el ejemplo estamos apuntando al mismo servidor en que está alojado el site y le asignamos el rol de StateServer, aunque también podríamos apuntar a un equipo remoto. Un requisito para que funcione StateServer es habilitar el servicio de windows correspondiente para realizar esta gestión. En caso de no hacerlo recibiremos el siguiente error al iniciar una sesión.

No se puede realizar una solicitud de estado de sesión al servidor de estado de sesión. Compruebe que el servicio de estado ASP.NET se ha iniciado y que los puertos de cliente y servidor son los mismos. Si el servidor se encuentra en un equipo remoto, compruebe el valor de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection para asegurarse de que acepta más solicitudes. Si el servidor se encuentra en el equipo local y si el mencionado valor del registro no existe o está establecido en 0, la cadena de conexión del servidor de estado debe utilizar 'localhost' o '127.0.0.1' como nombre de servidor.

Para solucionarlo hemos de ir a Inicio -> Ejecutar y teclear Services.msc para abrir la consola de administración de servicios del servidor que hayamos indicado en el atributo stateConnectionString. A continuación nos situamos en el servicio "Servicio de estado ASP.NET", lo iniciamos y además modificamos el tipo de inicio a modo automático.

Hasta aquí el post de esta semana, os recordamos que podéis seguir areaTIC en las redes sociales o vía RSS!


No hay comentarios:

Publicar un comentario en la entrada