Fournisseur d’États de session ASP.NET pour le Cache Azure pour RedisASP.NET Session State Provider for Azure Cache for Redis

Le Cache Azure pour Redis intègre un fournisseur d’État de session qui vous permet de stocker l’État de votre session en mémoire avec le Cache Azure pour Redis plutôt qu’avec une base de données 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. Pour utiliser le fournisseur d’État de session de la mise en cache, configurez d’abord votre cache, puis configurez votre application ASP.NET pour la mise en cache à l’aide du package NuGet de l’État de session du Cache Azure pour 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.

Dans une application cloud réelle, il n’est souvent pas pratique d’éviter de stocker une forme d’état de session utilisateur, mais certaines approches ont davantage d’incidence que d’autres sur les performances et l'extensibilité.It'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 vous devez stocker un état, la meilleure solution consiste à veiller à ce qu’il reste de petite taille et à le stocker dans des cookies.If you have to store state, the best solution is to keep the amount of state small and store it in cookies. Si cette approche est impossible, le mieux est d’utiliser l’état de session ASP.NET avec un fournisseur de cache distribué en mémoire.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 pire solution du point de vue des performances et de l’extensibilité consiste à utiliser un fournisseur d’état de session s'appuyant sur une base de données.The worst solution from a performance and scalability standpoint is to use a database backed session state provider. Cette rubrique comporte des conseils sur l’utilisation du fournisseur d’État de session ASP.NET concernant le Cache Azure pour Redis.This topic provides guidance on using the ASP.NET Session State Provider for Azure Cache for Redis. Pour plus d’informations sur les autres options d’état de session, consultez Options d’état de session ASP.NET.For information on other session state options, see ASP.NET Session State options.

Stockage de l'état de session ASP.NET dans le cacheStore ASP.NET session state in the cache

Pour configurer une application cliente dans Visual Studio avec le package NuGet de l’État de session du Cache Azure pour Redis, cliquez sur Gestionnaire de package NuGet, Console du Gestionnaire de package dans le menu Outils.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.

Exécutez la commande suivante depuis la fenêtre Package Manager Console.Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisSessionStateProvider

Important

Si vous utilisez la fonction de clustering du niveau Premium, vous devez utiliser RedisSessionStateProvider version 2.0.1 ou ultérieure, sans quoi une exception est levée.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. Passer à la version 2.0.1 ou ultérieure est une modification avec rupture. Pour plus d’informations, consultez Détails de la modification avec rupture pour la version 2.0.0.Moving to 2.0.1 or higher is a breaking change; for more information, see v2.0.0 Breaking Change Details. Au moment de la mise à jour de cet article, la version actuelle de ce package est 2.2.3.At the time of this article update, the current version of this package is 2.2.3.

Le package NuGet du fournisseur d’état de session Redis a une dépendance sur le package StackExchange.Redis.StrongName.The Redis Session State Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Le package StackExchange.Redis.StrongName est automatiquement installé s’il ne figure pas déjà dans votre projet.If the StackExchange.Redis.StrongName package is not present in your project, it is installed.

Notes

Il existe, en plus du package StackExchange.Redis.StrongName avec nom fort, une version de StackExchange.Redis sans nom fort.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Si votre projet utilise la version StackExchange.Redis sans nom fort, vous devez la désinstaller, sans quoi vous aurez des conflits de noms dans votre projet.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it, otherwise you get naming conflicts in your project. Pour plus d’informations sur ces packages, consultez la section Configuration des clients de cache .NET.For more information about these packages, see Configure .NET cache clients.

Le package NuGet télécharge et ajoute les références d’assembly nécessaires et ajoute la section suivante dans votre fichier web.config.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Cette section contient la configuration requise pour que votre application ASP.NET utilise le fournisseur d’État de session du Cache Azure pour 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>

La section commentée fournit un exemple d’attributs et de paramétrage pour chacun de ces attributs.The commented section provides an example of the attributes and sample settings for each attribute.

Configurez les attributs avec les valeurs du panneau de votre cache sur le portail Microsoft Azure et configurez les autres valeurs selon votre choix.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Pour obtenir des instructions sur l’accès aux propriétés de votre cache, voir Configurer les paramètres du Cache Azure pour Redis.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

  • host : spécifiez le point de terminaison de votre cache.host – specify your cache endpoint.
  • port : utilisez votre port non SSL ou votre port SSL, selon les paramètres ssl.port – use either your non-SSL port or your SSL port, depending on the ssl settings.
  • accessKey : utilisez la clé primaire ou secondaire pour votre cache.accessKey – use either the primary or secondary key for your cache.
  • ssl : choisissez « true » si vous souhaitez sécuriser les communications cache/client avec ssl ; sinon, choisissez « false ».ssl – true if you want to secure cache/client communications with ssl; otherwise false. Veillez à spécifier le port approprié.Be sure to specify the correct port.
    • Le port non SSL est désactivé par défaut pour les nouveaux caches.The non-SSL port is disabled by default for new caches. Spécifiez true pour utiliser le port SSL pour ce paramètre.Specify true for this setting to use the SSL port. Pour plus d’informations sur l’activation du port non SSL, consultez la section relative aux ports d’accès dans la rubrique Configuration d’un cache.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
  • throwOnError : true si vous voulez lever une exception en cas d’échec, ou false si vous souhaitez que l’opération échoue en silence.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. Pour contrôler un échec, vous pouvez vérifier la propriété statique Microsoft.Web.Redis.RedisSessionStateProvider.LastException.You can check for a failure by checking the static Microsoft.Web.Redis.RedisSessionStateProvider.LastException property. La valeur par défaut est true.The default is true.
  • retryTimeoutInMilliseconds : intervalle, en millisecondes, au cours duquel interviennent les nouvelles tentatives d’exécution des opérations ayant échoué.retryTimeoutInMilliseconds – Operations that fail are retried during this interval, specified in milliseconds. La première nouvelle tentative intervient après 20 millisecondes. Les tentatives suivantes se produisent à chaque seconde jusqu’à l’expiration de l’intervalle retryTimeoutInMilliseconds.The first retry occurs after 20 milliseconds, and then retries occur every second until the retryTimeoutInMilliseconds interval expires. Une dernière tentative d’exécution est effectuée immédiatement après cet intervalle.Immediately after this interval, the operation is retried one final time. Si le problème persiste, l’exception est renvoyée à l’appelant, en fonction du paramètre throwOnError.If the operation still fails, the exception is thrown back to the caller, depending on the throwOnError setting. La valeur 0 par défaut signifie qu’aucune nouvelle tentative n’est effectuée.The default value is 0, which means no retries.
  • databaseId : spécifie la base de données à utiliser pour les données de sortie du cache.databaseId – Specifies which database to use for cache output data. Si ce champ n’est pas spécifié, la valeur 0 sera utilisée par défaut.If not specified, the default value of 0 is used.
  • applicationName : les clés sont stockées dans redis sous {<Application Name>_<Session ID>}_Data.applicationName – Keys are stored in redis as {<Application Name>_<Session ID>}_Data. Ce schéma d’affectation permet à plusieurs applications de partager la même instance Redis.This naming scheme enables multiple applications to share the same Redis instance. Ce paramètre est facultatif. Si vous n’indiquez aucune valeur, une valeur par défaut sera utilisée.This parameter is optional and if you do not provide it a default value is used.
  • connectionTimeoutInMilliseconds : ce paramètre vous permet de remplacer le paramètre connectTimeout dans le client StackExchange.Redis.connectionTimeoutInMilliseconds – This setting allows you to override the connectTimeout setting in the StackExchange.Redis client. S’il n’est pas spécifié, le paramètre par défaut connectTimeout 5000 est utilisé.If not specified, the default connectTimeout setting of 5000 is used. Pour plus d’informations, consultez le modèle de configuration StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • operationTimeoutInMilliseconds : ce paramètre vous permet de remplacer le paramètre syncTimeout dans le client StackExchange.Redis.operationTimeoutInMilliseconds – This setting allows you to override the syncTimeout setting in the StackExchange.Redis client. S’il n’est pas spécifié, le paramètre par défaut syncTimeout 1000 est utilisé.If not specified, the default syncTimeout setting of 1000 is used. Pour plus d’informations, consultez le modèle de configuration StackExchange.Redis.For more information, see StackExchange.Redis configuration model.
  • redisSerializerType : ce paramètre vous permet de spécifier une sérialisation personnalisée du contenu de session envoyé à Redis.redisSerializerType - This setting allows you to specify custom serialization of session content that is sent to Redis. Le type spécifié doit implémenter Microsoft.Web.Redis.ISerializer et déclarer un constructeur public sans paramètre.The type specified must implement Microsoft.Web.Redis.ISerializer and must declare public parameterless constructor. Par défaut, System.Runtime.Serialization.Formatters.Binary.BinaryFormatter est utilisé.By default System.Runtime.Serialization.Formatters.Binary.BinaryFormatter is used.

Pour plus d’informations sur ces propriétés, consultez la publication du blog d’origine Announcing ASP.NET Session State Provider for Redis(en anglais).For more information about these properties, see the original blog post announcement at Announcing ASP.NET Session State Provider for Redis.

N’oubliez pas de commenter la section relative au fournisseur d’état de session standard InProc dans votre fichier 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> -->

Une fois ces étapes effectuées, votre application est configurée pour utiliser le fournisseur d’État de session du Cache Azure pour Redis.Once these steps are performed, your application is configured to use the Azure Cache for Redis Session State Provider. Lorsque vous utilisez l’État de session dans votre application, il est stocké dans une instance de Cache Azure pour Redis.When you use session state in your application, it is stored in an Azure Cache for Redis instance.

Important

Les données stockées dans le cache doivent être sérialisables, contrairement aux données qui peuvent être stockées dans le fournisseur d’état de session en mémoire ASP.NET par défaut.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. Lorsque vous utilisez le fournisseur d’état de session pour Redis, assurez-vous que les types de données qui sont stockés dans l’état de session sont sérialisables.When the Session State Provider for Redis is used, be sure that the data types that are being stored in session state are serializable.

Options d’état de session ASP.NETASP.NET Session State options

  • Fournisseur d’état de session en mémoire : ce fournisseur stocke l’état de session dans la mémoire.In Memory Session State Provider - This provider stores the Session State in memory. Ce fournisseur présente l’avantage d’être à la fois simple et rapide.The benefit of using this provider is it is simple and fast. Vous ne pourrez cependant pas faire évoluer vos applications Web si vous utilisez le fournisseur en mémoire dans la mesure où il n’est pas distribué.However you cannot scale your Web Apps if you are using in memory provider since it is not distributed.
  • Fournisseur d’état de session dans le serveur SQL : ce fournisseur stocke l’état de session dans le serveur SQL.Sql Server Session State Provider - This provider stores the Session State in Sql Server. Utilisez ce fournisseur si vous souhaitez stocker l’état de session dans un stockage permanent.Use this provider if you want to store the Session state in persistent storage. Vous pouvez faire évoluer votre application Web, mais l’utilisation du serveur SQL pour la session a un impact sur les performances de votre application Web.You can scale your Web App but using Sql Server for Session has a performance impact on your Web App. Vous pouvez également utiliser ce fournisseur avec une configuration OLTP en mémoire pour aider à améliorer les performances.You can also use this provider with an In-Memory OLTP configuration to help improve performance.
  • Fournisseur d’État de session distribué en mémoire (par exemple, fournisseur d’État de session du Cache Azure pour Redis) : ce fournisseur associe tous les avantages.Distributed In Memory Session State Provider such as Azure Cache for Redis Session State Provider - This provider gives you the best of both worlds. Votre application Web peut bénéficier d’un fournisseur d’état de session à la fois simple, rapide et évolutif.Your Web App can have a simple, fast, and scalable Session State Provider. Étant donné que ce fournisseur stocke l’état de session dans un cache et que votre application doit prendre en considération toutes les caractéristiques associées lorsqu’elle communique avec un cache distribué en mémoire (par exemple, les défaillances réseau temporaires).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. Pour obtenir des recommandations sur l’utilisation du Cache, consultez la page Caching Guidance dans le Guide de conception et d’implémentation des applications Azure Cloud de Microsoft Patterns & Practices.For best practices on using Cache, see Caching guidance from Microsoft Patterns & Practices Azure Cloud Application Design and Implementation Guidance.

Pour plus d'informations sur l’état de session et obtenir d’autres meilleures pratiques, consultez la page Web Development Best Practices (Building Real-World Cloud Apps with Azure).For more information about session state and other best practices, see Web Development Best Practices (Building Real-World Cloud Apps with Azure).

Étapes suivantesNext steps

Consultez l’article Fournisseur de caches de sortie ASP.NET pour le Cache Azure pour Redis.Check out the ASP.NET Output Cache Provider for Azure Cache for Redis.