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

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