Fournisseur de caches de sortie ASP.NET pour le Cache Azure pour Redis

Le fournisseur de caches de sortie Redis est un mécanisme de stockage hors processus pour les données de cache de sortie. Ces données concernent spécialement les réponses HTTP complètes (mise en cache de la sortie de pages). Le fournisseur se connecte au nouveau point d'extension du fournisseur de caches de sortie introduit dans ASP.NET 4. Pour des informations sur les applications ASP.NET Core, consultez Mise en cache des réponses dans ASP.NET Core.

Pour utiliser le fournisseur de caches de sortie Redis, configurez d’abord votre cache, puis configurez votre application ASP.NET en utilisant le package NuGet du fournisseur de caches de sortie Redis. Cet article fournit des conseils sur la configuration de votre application pour utiliser le fournisseur de caches de sortie Redis. Pour plus d’informations sur la création et la configuration d’une instance de Cache Azure pour Redis, voir Créer un cache.

Stockage de la sortie de pages ASP.NET dans le cache

Pour configurer une application cliente dans Visual Studio avec le package NuGet de l’État de session du Cache Azure pour Redis, sélectionnez Gestionnaire de package NuGet, Console du Gestionnaire de package dans le menu Outils.

Exécutez la commande suivante depuis la fenêtre Package Manager Console.

Install-Package Microsoft.Web.RedisOutputCacheProvider

Le package NuGet du fournisseur de caches de sortie Redis a une dépendance sur le package StackExchange.Redis. Le package StackExchange.Redis est automatiquement installé s’il ne figure pas déjà dans votre projet. Pour plus d’informations sur le package NuGet du fournisseur de caches de sortie Redis, consultez la page NuGet RedisOutputCacheProvider.

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. Cette section contient la configuration requise pour que votre application ASP.NET utilise le fournisseur de cache de sortie Redis.

<caching>
  <outputCache defaultProvider="MyRedisOutputCache">
    <providers>
      <add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider"
           host=""
           accessKey=""
           ssl="true" />
    </providers>
  </outputCache>
</caching>

Configurez les attributs sur la gauche avec les valeurs de votre cache dans le Portail Microsoft Azure. En outre, configurez les autres valeurs souhaitées. 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.

Attribut Type Default Description
host string "localhost" Le nom hôte ou l’adresse IP du serveur Redis
port entier positif 6379 (non TLS/SSL)
6380 (TLS/SSL)
Port du serveur Redis
accessKey string "" Mot de passe Redis lorsque l’autorisation Redis est activée. La valeur est une chaîne vide par défaut, ce qui signifie que le fournisseur d’état de session ne peut pas utiliser n’importe quel mot de passe pour se connecter au serveur Redis. Si votre serveur Redis se trouve sur un réseau accessible publiquement comme Azure Cache pour Redis, activez l’autorisation Redis pour améliorer la sécurité et fournir un mot de passe sécurisé.
ssl boolean false Indique s’il faut ou non se connecter au serveur Redis via TLS. La valeur est false par défaut, car Redis ne prend pas en charge TLS par défaut. Si vous utilisez Azure Cache pour Redis, qui prend en charge SSL par défaut, veillez à définir cette valeur sur true pour améliorer la sécurité.

Le port non TLS est désactivé par défaut pour les nouveaux caches. Spécifiez true pour ce paramètre afin d’utiliser le port non TLS. Pour plus d’informations sur l’activation du port non TLS, consultez la section relative aux ports d’accès dans l’article Configuration d’un cache.
databaseIdNumber entier positif 0 Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Spécifie la base de données Redis à utiliser.
connectionTimeoutInMilliseconds entier positif Fourni par StackExchange.Redis Permet de définir ConnectTimeout lors de la création de StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds entier positif Fourni par StackExchange.Redis Permet de définir SyncTimeout lors de la création de StackExchange.Redis.ConnectionMultiplexer.
connectionString (chaîne de connexion StackExchange.Redis valide) string n/a Référence de paramètre à AppSettings ou web.config, ou une chaîne de connexion StackExchange.Redis valide. Cet attribut peut fournir des valeurs pour l’hôte, la port, accessKey, sslet d’autres attributs de StackExchange.Redis. Pour plus de détail sur connectionString, consultez Paramétrage de connectionString dans la section Remarques sur les attributs.
settingsClassName
settingsMethodName
string
string
n/a Ces attributs peuvent uniquement être spécifiés par le biais de web.config ou AppSettings.

Utilisez ces attributs pour fournir une chaîne de connexion. settingsClassName doit être un nom de classe d’assembly qualifié qui contient la méthode spécifiée par settingsMethodName.

La méthode spécifiée par settingsMethodName doit être publique, statique et vide (sans aucun paramètre), avec un type de retour de chaîne. Cette méthode retourne la chaîne de connexion réelle.
loggingClassName
loggingMethodName
string
string
n/a Ces attributs peuvent uniquement être spécifiés par le biais de web.config ou AppSettings.

Utilisez ces attributs pour déboguer votre application en fournissant des journaux à partir du Cache de l’état de session/sortie, ainsi que des journaux à partir de StackExchange.Redis. loggingClassName doit être un nom de classe d’assembly qualifié qui contient la méthode spécifiée par loggingMethodName.

La méthode spécifiée par loggingMethodName doit être publique, statique et vide (sans aucun paramètre), avec un type de retour System.IO.TextWriter.
applicationName string Le nom du module du processus en cours ou « / » SessionStateProvider uniquement
Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Le préfixe de nom d’application à utiliser dans le cache Redis. Le client peut utiliser le même cache Redis à des fins différentes. Pour s’assurer que les clés de session ne sont pas en conflit, il est possible de les préfixer avec le nom de l’application.
throwOnError boolean true SessionStateProvider uniquement
Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Indique s’il faut ou non lever une exception lorsqu’une erreur se produit.

Pour plus d’informations sur throwOnError, consultez Remarques sur throwOnError dans la section Remarques sur les attributs.
retryTimeoutInMilliseconds entier positif 5 000 SessionStateProvider uniquement
Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Combien de nouvelles tentatives en cas d’échec d’une opération. Si cette valeur est inférieure à operationTimeoutInMilliseconds, le fournisseur ne fera pas de nouvelles tentatives.

Pour plus d’informations sur retryTimeoutInMilliseconds, consultez Remarques sur retryTimeoutInMilliseconds dans la section Remarques sur les attributs.
redisSerializerType string n/a Spécifie le nom de type d’assembly qualifié d’une classe qui implémente Microsoft.Web.Redis. ISerializer et qui contient la logique personnalisée pour sérialiser et désérialiser les valeurs. Pour plus d’informations, consultez À propos de redisSerializerType dans la section Remarques sur les attributs.

Remarques sur les attributs

Paramétrage de connectionString

La valeur de connectionString est utilisée comme clé pour extraire la chaîne de connexion réelle d’AppSettings, si cette chaîne existe dans AppSettings. Si cette valeur ne se trouve pas dans AppSettings, la valeur de connectionString sera utilisée comme clé pour extraire la chaîne de connexion réelle de la section ConnectionString de web.config, si cette section existe. Si la chaîne de connexion n’existe pas dans AppSettings ou dans la section web.config ConnectionString, la valeur littérale de connectionString sera utilisée comme la chaîne de connexion lors de la création de StackExchange.Redis.ConnectionMultiplexer.

Les exemples suivants illustrent comment connectionString est utilisé.

Exemple 1

<connectionStrings>
    <add name="MyRedisConnectionString" connectionString="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</connectionStrings>

Dans web.config, utilisez la clé ci-dessus comme valeur de paramètre au lieu de la valeur réelle.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "MyRedisConnectionString"/>
    </providers>
</sessionState>

Exemple 2

<appSettings>
    <add key="MyRedisConnectionString" value="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</appSettings>

Dans web.config, utilisez la clé ci-dessus comme valeur de paramètre au lieu de la valeur réelle.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "MyRedisConnectionString"/>
    </providers>
</sessionState>

Exemple 3

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False"/>
    </providers>
</sessionState>

Remarques sur throwOnError

Actuellement, si une erreur se produit pendant une opération de session, le fournisseur d’état de session lève une exception. La levée de l’exception ferme l’application.

Ce comportement a été modifié afin de répondre aux attentes des utilisateurs du fournisseur état de session ASP.NET existants, tout en permettant d’agir sur les exceptions. Le comportement par défaut lève toujours une exception lorsqu’une erreur se produit, de façon cohérente avec les autres fournisseurs d’état de session ASP.net. Le code existant doit fonctionner de la même façon qu’auparavant.

Si vous définissez throwOnError sur la valeur false, au lieu de lever une exception lorsqu’une erreur se produit, vous ne serez pas informé de l’échec. Pour voir si une erreur s’est produite et, dans ce cas, découvrir l’exception qui l’a provoquée, vérifiez la propriété statique Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Remarques sur retryTimeoutInMilliseconds

Le paramètre retryTimeoutInMilliseconds fournit une certaine logique pour simplifier le cas où une opération de session doit réessayer en cas d’échec en raison d’un problème réseau ou d’un autre point. Le paramètre retryTimeoutInMilliseconds vous permet également de contrôler le délai d’expiration des nouvelles tentatives ou de refuser complètement les nouvelles tentatives.

Si vous définissez retryTimeoutInMilliseconds sur un nombre, par exemple 2000, si une opération de session échoue, il réessaiera pendant 2000 millisecondes avant de traiter le problème comme une erreur. Pour que le fournisseur d’état de session applique cette logique de nouvelle tentative, il suffit de configurer le délai d’attente. La première nouvelle tentative aura lieu après 20 millisecondes, ce qui est suffisant dans la plupart des cas quand un problème réseau se produit. Après cela, il réessaiera toutes les secondes jusqu’à expiration. Juste après l’expiration, il réessaiera encore une fois pour s’assurer qu’il ne réduit pas le délai d’attente d’une seconde (au plus).

Si vous pensez avoir besoin de tenter de nouveau ou si vous voulez gérer la logique de nouvelle tentative vous même, définissez retryTimeoutInMilliseconds sur 0. Par exemple, vous ne souhaiterez peut-être pas réessayer lorsque vous exécutez le serveur Redis sur le même ordinateur que votre application.

À propos de redisSerializerType

La sérialisation pour stocker les valeurs sur Redis est effectuée dans un format binaire par défaut fourni par la classe BinaryFormatter. Utilisez redisSerializerType pour spécifier le nom de type d’assembly qualifié d’une classe qui implémente Microsoft.Web.Redis.ISerializer et possède la logique personnalisée pour sérialiser et désérialiser les valeurs. Par exemple, voici une classe de sérialiseur Json qui utilise JSON.NET :

namespace MyCompany.Redis
{
    public class JsonSerializer : ISerializer
    {
        private static JsonSerializerSettings _settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };

        public byte[] Serialize(object data)
        {
            return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, _settings));
        }

        public object Deserialize(byte[] data)
        {
            if (data == null)
            {
                return null;
            }
            return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), _settings);
        }
    }
}

En supposant que cette classe est définie dans un assembly avec pour nom MyCompanyDll, vous pouvez définir le paramètre redisSerializerType à utiliser :

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             redisSerializerType = "MyCompany.Redis.JsonSerializer,MyCompanyDll"
             ... />
    </providers>
</sessionState>

Directive de cache de sortie

Ajoutez une directive OutputCache à chaque page pour laquelle vous voulez mettre en cache la sortie.

<%@ OutputCache Duration="60" VaryByParam="*" %>

Dans l’exemple précédent, les données de page mises en cache resteront dans le cache pendant 60 secondes et une version différente de la page est mise en cache pour chaque combinaison de paramètres. Pour plus d’informations sur la directive OutputCache, consultez @OutputCache.

Après avoir effectué ces étapes, votre application est configurée pour utiliser le fournisseur de caches de sortie Redis.

Fournisseur de caches de sortie tiers

Étapes suivantes

Voir Fournisseur d’États de session ASP.NET pour le Cache Azure pour Redis.