Proveedor de estado de sesión de ASP.NET para Azure Cache for Redis
Azure Cache for Redis proporciona un proveedor de estado de sesión que se puede usar para almacenar el estado de una sesión en memoria con Azure Cache for Redis, en lugar de en una base de datos de SQL Server. Para usar el proveedor de estado de sesión de caché, configure primero su caché y, después, configure su aplicación ASP.NET para caché mediante el paquete NuGet de estado de sesión de Azure Cache for Redis. En el caso de las aplicaciones ASP.NET Core, lea Administración del estado y la sesión en ASP.NET Core.
No suele ser práctico evitar almacenar algún tipo de estado para una sesión de usuario en una aplicación de nube real, pero algunos enfoques afectan al rendimiento y a la escalabilidad más que otros Si tiene que almacenar el estado, la mejor solución es que la cantidad sea reducida y que se almacene en cookies. Si esto no es factible, entonces lo mejor es usar el estado de sesión de ASP.NET con un proveedor de caché distribuida en memoria. La peor solución desde el punto de vista del rendimiento y la escalabilidad es usar un proveedor de estado de sesión con copia de seguridad de base de datos. En este tema se ofrecen instrucciones sobre cómo usar el proveedor de estado de sesión de ASP.NET para Azure Cache for Redis. Para información sobre otras opciones de estado de sesión, consulte Opciones de estado de sesión ASP.NET.
Almacenamiento del estado de sesión ASP.NET en la memoria caché
Para configurar una aplicación cliente en Visual Studio usando el paquete NuGet de estado de sesión de Azure Cache for Redis, en el menú Herramientas, seleccione Administrador de paquetes NuGet y Consola del Administrador de paquetes.
Ejecute el siguiente comando desde la ventana Package Manager Console.
Install-Package Microsoft.Web.RedisSessionStateProvider
Importante
Si usa la característica de clústeres del nivel premium, debe usar RedisSessionStateProvider 2.0.1 o superior; de lo contrario, se produce una excepción. El cambio a la versión 2.0.1 es un cambio importante. Para obtener más información, consulte v2.0.0 Breaking Change Details (Detalles sobre cambios importantes de la versión 2.0.0). En el momento de la actualización de este artículo, la versión actual de este paquete es 2.2.3.
El paquete NuGet de proveedor de estado de sesión de Redis tiene una dependencia en el paquete StackExchange.Redis. Si el paquete StackExchange.Redis no existe en el proyecto, se instalará.
El paquete NuGet descarga y agrega las referencias de ensamblado necesarias y agrega la siguiente sección al archivo web.config. Esta sección contiene la configuración necesaria para que la aplicación ASP.NET use el proveedor de estado de sesión de Azure Cache for Redis.
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<!-- Either use 'connectionString' OR 'settingsClassName' and 'settingsMethodName' OR use 'host','port','accessKey','ssl','connectionTimeoutInMilliseconds' and 'operationTimeoutInMilliseconds'. -->
<!-- 'throwOnError','retryTimeoutInMilliseconds','databaseId' and 'applicationName' can be used with both options. -->
<!--
<add name="MySessionStateStore"
host = "127.0.0.1" [String]
port = "" [number]
accessKey = "" [String]
ssl = "false" [true|false]
throwOnError = "true" [true|false]
retryTimeoutInMilliseconds = "5000" [number]
databaseId = "0" [number]
applicationName = "" [String]
connectionTimeoutInMilliseconds = "5000" [number]
operationTimeoutInMilliseconds = "1000" [number]
connectionString = "<Valid StackExchange.Redis connection string>" [String]
settingsClassName = "<Assembly qualified class name that contains settings method specified below. Which basically return 'connectionString' value>" [String]
settingsMethodName = "<Settings method should be defined in settingsClass. It should be public, static, does not take any parameters and should have a return type of 'String', which is basically 'connectionString' value.>" [String]
loggingClassName = "<Assembly qualified class name that contains logging method specified below>" [String]
loggingMethodName = "<Logging method should be defined in loggingClass. It should be public, static, does not take any parameters and should have a return type of System.IO.TextWriter.>" [String]
redisSerializerType = "<Assembly qualified class name that implements Microsoft.Web.Redis.ISerializer>" [String]
/>
-->
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
host=""
accessKey=""
ssl="true" />
</providers>
</sessionState>
En la sección comentada se proporciona un ejemplo de los atributos y la configuración de ejemplo de cada uno.
Configure los atributos con los valores de la parte izquierda de la caché en Microsoft Azure Portal y configure los demás valores según prefiera. Para obtener instrucciones acerca de cómo acceder a las propiedades de la caché, consulte Configuración de Azure Cache for Redis.
- host : especifique el punto de conexión de la caché.
- puerto: use el puerto no TLS/SSL o el puerto TLS/SSL, según la configuración de TLS.
- accessKey : use la clave primaria o secundaria para la caché.
- ssl: true si desea proteger las comunicaciones de la caché o el cliente con TLS; de lo contrario, false. Asegúrese de especificar el puerto correcto.
- El puerto no TLS está deshabilitado de forma predeterminada para las cachés nuevas. Especifique true en este valor para usar el puerto TLS. Para más información sobre cómo habilitar el puerto no TLS, vea la sección Puertos de acceso del tema de Configuración de caché.
- throwOnError : true si quiere que se produzca una excepción en caso de error; false si quiere que la operación devuelva un error silencioso. Para comprobar si hay un error, revise la propiedad estática Microsoft.Web.Redis.RedisSessionStateProvider.LastException. El valor predeterminado es true.
- retryTimeoutInMilliseconds : durante este intervalo, especificado en milisegundos, se reintenta realizar las operaciones que generan errores. El primer reintento se produce transcurridos 20 milisegundos y, después, se reintenta cada segundo hasta que el intervalo retryTimeoutInMilliseconds expira. Inmediatamente después de este intervalo, la operación se reintenta una última vez. Si aun así no funciona, se devuelve una excepción al autor de la llamada, en función de la configuración de throwOnError. El valor predeterminado es 0, lo que significa que no hay reintentos.
- databaseId : especifica qué base de datos se va a usar para los datos de salida de la memoria caché. Si no se especifica, se usa el valor predeterminado de 0.
- applicationName
{<Application Name>_<Session ID>}_Data: las claves se almacenan en Redis como . Este esquema de nomenclatura permite que varias aplicaciones compartan la misma instancia de Redis. Este parámetro es opcional y, si no se especifica, se usa un valor predeterminado. - connectionTimeoutInMilliseconds : esta opción le permite invalidar la configuración de connectTimeout en el cliente de StackExchange.Redis. Si no se especifica, se usa el valor predeterminado de connectTimeout, que es 5000. Para obtener más información, consulte el modelo de configuración de StackExchange.Redis.
- operationTimeoutInMilliseconds : esta opción le permite invalidar la configuración de syncTimeout en el cliente de StackExchange.Redis. Si no se especifica, se usa el valor predeterminado de syncTimeout, que es 1000. Para obtener más información, consulte el modelo de configuración de StackExchange.Redis.
- redisSerializerType: esta opción permite especificar la serialización personalizada del contenido de la sesión que se envía a Redis. El tipo especificado debe implementar
Microsoft.Web.Redis.ISerializery debe declarar el constructor sin parámetros público. De forma predeterminada, se usaSystem.Runtime.Serialization.Formatters.Binary.BinaryFormatter.
Para obtener más información sobre estas propiedades, consulte el anuncio de entrada de blog original en Announcing ASP.NET Session State Provider for Redis(Anuncio de proveedor de estado de sesión de ASP.NET para Redis).
No olvide comentar la sección del proveedor de estado de sesión InProc estándar en el archivo web.config.
<!-- <sessionState mode="InProc"
customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider"
type="System.Web.Providers.DefaultSessionStateProvider,
System.Web.Providers, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection" />
</providers>
</sessionState> -->
Una vez realizados estos pasos, la aplicación está configurada para usar el proveedor de estado de sesión de Azure Cache for Redis. Cuando se usa el estado de sesión en la aplicación, se almacena en una instancia de Azure Cache for Redis.
Importante
Los datos almacenados en la memoria caché deben ser serializables, a diferencia de los datos que se puedan almacenar en el proveedor de estado de sesión de ASP.NET en memoria predeterminado. Al usar el proveedor de estado de sesión para Redis, asegúrese de que los tipos de datos que se almacenan en el estado de sesión sean serializables.
Opciones de estado de sesión de ASP.NET
- Proveedor de estado de sesión en memoria: este proveedor almacena el estado de sesión en la memoria. La ventaja de usar este proveedor es que es sencillo y rápido. Sin embargo, con el proveedor en memoria no se pueden escalar las aplicaciones web, ya que no se distribuye.
- Proveedor de estado de sesión de SQL Server: este proveedor almacena el estado de sesión en SQL Server. Use este proveedor si desea conservar el estado de sesión en un almacenamiento persistente. Puede escalar la aplicación web, pero el uso de SQL Server para la sesión afectará al rendimiento de dicha aplicación. También se puede utilizar este proveedor con una configuración de OLTP en memoria para ayudarle a mejorar el rendimiento.
- Proveedor de estado de sesión en memoria distribuida como proveedor de estado de sesión de Azure Cache for Redis: este proveedor le ofrece lo mejor de ambos mundos. La aplicación web puede tener un proveedor de estado de sesión sencillo, rápido y escalable. Como este proveedor almacena el estado de sesión en una memoria caché, la aplicación tiene que tomar en consideración todas las características asociadas al comunicarse con una memoria caché en memoria distribuida, como los errores de red transitorios. Para ver los procedimientos recomendados para el uso de la memoria caché, consulte Instrucciones de almacenamiento en caché en las Instrucciones de implementación y diseño de aplicaciones en la nube de Azure de los modelos y prácticas de Microsoft.
Para obtener más información sobre el estado de sesión y otros procedimientos recomendados, consulte Procedimientos recomendados de desarrollo web (compilación de aplicaciones en la nube reales con Azure).
Proveedores de estado de sesión de terceros
Pasos siguientes
Consulte ASP.NET Output Cache Provider for Azure Cache for Redis (Proveedor de caché de salida de ASP.NET para Azure Cache for Redis).