Proveedor de estado de sesión de ASP.NET para Azure Cache for RedisASP.NET Session State Provider for 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.Azure Cache for Redis provides a session state provider that you can use to store your session state in-memory with Azure Cache for Redis instead of a SQL Server database. 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.To use the caching session state provider, first configure your cache, and then configure your ASP.NET application for cache using the Azure Cache for Redis Session State NuGet package.

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 otrosIt's often not practical in a real-world cloud app to avoid storing some form of state for a user session, but some approaches impact performance and scalability more than others. Si tiene que almacenar el estado, la mejor solución es que la cantidad sea reducida y que se almacene en cookies.If you have to store state, the best solution is to keep the amount of state small and store it in 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.If that isn't feasible, the next best solution is to use ASP.NET session state with a provider for distributed, in-memory cache. 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.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. 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.This topic provides guidance on using the ASP.NET Session State Provider for Azure Cache for Redis. Para información sobre otras opciones de estado de sesión, consulte Opciones de estado de sesión ASP.NET.For information on other session state options, see ASP.NET Session State options.

Almacenamiento del estado de sesión ASP.NET en la memoria cachéStore ASP.NET session state in the cache

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, haga clic en Administrador de paquetes NuGet y en Consola del Administrador de paquetes.To configure a client application in Visual Studio using the Azure Cache for Redis Session State NuGet package, click NuGet Package Manager, Package Manager Console from the Tools menu.

Ejecute el siguiente comando desde la ventana Package Manager Console.Run the following command from the Package Manager Console window.

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.If you are using the clustering feature from the premium tier, you must use RedisSessionStateProvider 2.0.1 or higher or an exception is thrown. 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).Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. En el momento de la actualización de este artículo, la versión actual de este paquete es 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

El paquete NuGet de proveedor de estado de sesión de Redis tiene una dependencia en el paquete StackExchange.Redis.StrongName.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Si el paquete StackExchange.Redis.StrongName no existe en el proyecto, se instalará.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Nota

Tenga en cuenta que, además del paquete StackExchange.Redis.StrongName con nombre seguro, también está la versión con nombre no seguro de StackExchange.Redis.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Si su proyecto está utilizando la versión de StackExchange.Redis con nombre no seguro deberá desinstalarla, ya que de lo contrario se producirán conflictos de nomenclatura en el proyecto.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Para obtener más información sobre estos paquetes, consulte Configuración de los clientes de la caché de .NET.For more information about these packages, see Configure .NET cache clients.

El paquete NuGet descarga y agrega las referencias de ensamblado necesarias y agrega la siguiente sección al archivo web.config.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. 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.This section contains the required configuration for your ASP.NET application to use the Azure Cache for Redis Session State Provider.

<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.The commented section provides an example of the attributes and sample settings for each attribute.

Configure los atributos con los valores de la hoja de la caché en el Portal de Microsoft Azure y configure los demás valores según prefiera.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Para obtener instrucciones acerca de cómo acceder a las propiedades de la caché, consulte Configuración de Azure Cache for Redis.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

  • host : especifique el punto de conexión de la caché.host – specify your cache endpoint.
  • puerto : use el puerto no SSL o SSL, según la configuración de SSL.port – use either your non-SSL port or your SSL port, depending on the ssl settings.
  • accessKey : use la clave primaria o secundaria para la caché.accessKey – use either the primary or secondary key for your cache.
  • ssl : true si desea proteger las comunicaciones de la caché o el cliente con SLS; de lo contrario, false.ssl – true if you want to secure cache/client communications with ssl; otherwise false. Asegúrese de especificar el puerto correcto.Be sure to specify the correct port.
    • El puerto no SSL está deshabilitado de forma predeterminada para las cachés nuevas.The non-SSL port is disabled by default for new caches. Especifique true en este valor para usar el puerto SSL.Specify true for this setting to use the SSL port. Para más información sobre cómo habilitar el puerto no SSL, consulte la sección Puertos de acceso del tema de Configuración de caché.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
  • 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.throwOnError – true if you want an exception to be thrown if there is a failure, or false if you want the operation to fail silently. Para comprobar si hay un error, revise la propiedad estática Microsoft.Web.Redis.RedisSessionStateProvider.LastException.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. El valor predeterminado es true.The default is true.
  • retryTimeoutInMilliseconds : durante este intervalo, especificado en milisegundos, se reintenta realizar las operaciones que generan errores.retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. El primer reintento se produce transcurridos 20 milisegundos y, después, se reintenta cada segundo hasta que el intervalo retryTimeoutInMilliseconds expira.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Inmediatamente después de este intervalo, la operación se reintenta una última vez.Immediately after this interval, the operation is retried one final time. Si aun así no funciona, se devuelve una excepción al autor de la llamada, en función de la configuración de throwOnError.If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. El valor predeterminado es 0, lo que significa que no hay reintentos.The default value is 0, which means no retries.
  • databaseId : especifica qué base de datos se va a usar para los datos de salida de la memoria caché.databaseId – Specifies which database to use for cache output data. Si no se especifica, se usa el valor predeterminado de 0.If not specified, the default value of 0 is used.
  • applicationName: las claves se almacenan en Redis como {<Application Name>_<Session ID>}_Data.applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Este esquema de nomenclatura permite que varias aplicaciones compartan la misma instancia de Redis.This naming scheme enables multiple applications to share the same Redis instance. Este parámetro es opcional y, si no se especifica, se usa un valor predeterminado.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds : esta opción le permite invalidar la configuración de connectTimeout en el cliente de StackExchange.Redis.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. Si no se especifica, se usa el valor predeterminado de connectTimeout, que es 5000.If not specified, the default connectTimeout setting of 5000 is used. Para obtener más información, consulte el modelo de configuración de StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds : esta opción le permite invalidar la configuración de syncTimeout en el cliente de StackExchange.Redis.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. Si no se especifica, se usa el valor predeterminado de syncTimeout, que es 1000.If not specified, the default syncTimeout setting of 1000 is used. Para obtener más información, consulte el modelo de configuración de StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • redisSerializerType: esta opción permite especificar la serialización personalizada del contenido de la sesión que se envía a Redis.redisSerializerType - This setting allows you to specify custom serialization of session content that is sent to Redis. El tipo especificado debe implementar Microsoft.Web.Redis.ISerializer y debe declarar el constructor sin parámetros público.The type specified must implement Microsoft.Web.Redis.ISerializer and must declare public parameterless constructor. De forma predeterminada, se usa System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.By default System.Runtime.Serialization.Formatters.Binary.BinaryFormatter is used.

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).For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

No olvide comentar la sección del proveedor de estado de sesión InProc estándar en el archivo web.config.Don’t forget to comment out the standard InProc session state provider section in your 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.Once these steps are performed, your application is configured to use the Azure Cache for Redis Session State Provider. Cuando se usa el estado de sesión en la aplicación, se almacena en una instancia de Azure Cache for Redis.When you use session state in your application, it is stored in an Azure Cache for Redis instance.

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.Data stored in the cache must be serializable, unlike the data that can be stored in the default in-memory ASP.NET Session State Provider. 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.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Opciones de estado de sesión de ASP.NETASP.NET Session State options

  • Proveedor de estado de sesión en memoria: este proveedor almacena el estado de sesión en la memoria.In Memory Session State Provider - This provider stores the Session State in memory. La ventaja de usar este proveedor es que es sencillo y rápido.The benefit of using this provider is it is simple and fast. Sin embargo, con el proveedor en memoria no se pueden escalar las aplicaciones web, ya que no se distribuye.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • Proveedor de estado de sesión de SQL Server: este proveedor almacena el estado de sesión en SQL Server.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Use este proveedor si desea conservar el estado de sesión en un almacenamiento persistente.Use this provider if you want to store the Session state in persistent storage. Puede escalar la aplicación web, pero el uso de SQL Server para la sesión afectará al rendimiento de dicha aplicación.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App. También se puede utilizar este proveedor con una configuración de OLTP en memoria para ayudarle a mejorar el rendimiento.You can also use this provider with an In-Memory OLTP configuration to help improve performance.
  • 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.Distributed In Memory Session State Provider such as Azure Cache for Redis Session State Provider - This provider gives you the best of both worlds. La aplicación web puede tener un proveedor de estado de sesión sencillo, rápido y escalable.Your Web App can have a simple, fast, and scalable Session State Provider. 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.Because this provider stores the Session state in a Cache, your app has to take in consideration all the characteristics associated when talking to a Distributed In Memory Cache, such as transient network failures. 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.For best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

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).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Pasos siguientesNext steps

Consulte ASP.NET Output Cache Provider for Azure Cache for Redis (Proveedor de caché de salida de ASP.NET para Azure Cache for Redis).Check out the ASP.NET Output Cache Provider for Azure Cache for Redis.