Configurar SQL Server como servidor de estado de sesión de ASP.NET

by Marc Cortada 05/07/2013

Si después de intentar configurar el servidor de estado de sesión de SQL server nos encontramos con un error de inicio de sesión que nos indica que no se ha podido conectar con la base de datos (o algún otro tipo de error al intentar conectar), puede deberse a que no se han seguido todos los pasos necesarios para configurar SQL Server como servidor de sesiones. En algunos documentos que hay en la red no se especifican todos los pasos que hay que seguir indicando solamente una parte de ellos. En esta entrada os comento todos los pasos que he tenido que seguir para que funcione correctamente.

Básicamente, hay que tener en cuenta dos cosas: Una, que ejecutar el programa aspnet_regsql.exe no es suficiente para tener configurado SQL Server como servidor de inicio de sesión, la base de datos que crea es insuficiente porque hay que tener dos (aspnetdb y ASPState si respetamos los nombres por defecto). Después de ejecutar este programa/asistente, se tiene que ejecutar manualmente un script que creará la otra base de datos. Este script es: InstallSqlState.sql y puede estar ubicado en la carpeta C:\Windows\Microsoft.NET\Framework\v4.0.30319\. La carpeta variará en función de la instalación y/o la versión de .Net que tengamos instalada. La segunda cosa que hay que tener en cuenta es que este script tiene un comentario en la cabecera que dice que es recomendable usar el aspnet_regsql.exe en lugar de lanzarlo manualmente. Pues no, debe lanzarse manualmente después de ejecutar el programa/asistente porque este no ejecutará el script.

En resumen, los pasos completos a seguir para instalar un servidor SQL Server como servidor de estado de sesión son:

  1. Ejecutar el programa asistente aspnet_regsql.exe. Normalmente se encontrará en la ruta C:\Windows\Microsoft.NET\Framework\v4.0.30319\. No es necesario hacerlo desde el mismo servidor donde está instalado SQL Server, ya que el programa nos pedirá que introduzcamos la IP o el nombre del servidor SQL, y el usuario y contraseña para conectarse.
  2. Ejecutar el script InstallSqlState.sql, que debería encontrarse en la misma ruta que el archivo anterior, contra la base de datos que hará las funciones de servidor de estados de sesión. Se necesitará un cliente SQL Server (como el administrador corporativo) que nos permita lanzar el script contra un servidor. Igual que antes, podemos conectarnos desde otro equipo con el cliente que utilicemos.
  3. Finalmente, configurar el IIS mediante la consola o el archivo web.config de nuestra aplicación. En el caso de hacerlo en el archivo de web.config insertaremos un fragmento XML como el que sigue en el ejemplo (algunas configuraciones pueden requerir otros valores de parámetros):

<sessionState mode="SQLServer" sqlConnectionString="data source=<servidorBD>;user id=<usuario>;password=<contraseña>;"/>

Hay mucha documentación en la red sobre cómo configurar en el archivo web.config las distintas formas de gestionar el estado de sesión, así que no voy a entrar en más detalles acerca del fragmento sessionState.

Esta entrada está basada en la versión 4.0 de .NET. Puede que los pasos varíen en versiones posteriores. 

Como comentario adicional, cuando se utiliza SQL Server como servidor de estado de sesión no es necesario tener iniciado el servicio de Windows aspnet_state o "Servicio de estado de ASP.NET" en ninguno de los servidores IIS. Este servicio sirve para configurar un servidor como servidor de estado de sesión manteniendo los datos en su memoria. El servidor que se configure con este servicio albergará en memoria todas las variables de sesión de todos los IIS que “apunten” hacia él. Para ello, habrá que configurar cada IIS indicando cual es el servidor de sesiones. Precisamente por ello, porque todo va a la memoria de un servidor, el mi opinión no es la opción más recomendada a no ser que tengamos un servidor con los recursos de memoria suficientes para albergar todos los datos de todas las sesiones de todos los IIS. En este escenario, también tendremos que ser cuidadosos con la cantidad de información que almacenamos en las variables de sesión para no utilizar demasiada memoria. Por este motivo yo recomendaría la opción de SQL Server como servidor de estados en lugar de la opción de un Servidor con el servicio de estado de ASP.NET.

Tags:

Categorías: ASP.NET | SQLServer

No se aceptan más comentarios

Entradas por mes