Procédure : étendre la mise en cache à l'aide du gestionnaire d'événements VaryByCustom

Vous pouvez étendre et manipuler la mise en cache par la création d'une interface IVaryByCustomHandler. VaryByCustom est une fonctionnalité de mise en cache d'ASP.NET que vous pouvez utiliser pour mettre en cache plusieurs versions des sorties de page, sur la base de chaînes personnalisées. Par exemple, vous pouvez utiliser VaryByCustom si vous souhaitez afficher des pages mises en cache qui affichent une chaîne Bienvenue différente pour chaque utilisateur. Pour plus d'informations sur VaryByCustom dans ASP.NET, voir l'article Page Output Caching, Part 1 sur MSDN .

Cette rubrique couvre les trois étapes de base qui sont nécessaires pour utiliser la propriété VaryByCustom afin d'étendre la mise en cache dans Microsoft Office SharePoint Server 2007.

  • Créer un gestionnaire VaryByCustom qui fournit une liste de chaînes personnalisées que le cache de sortie utilise pour faire varier le contenu de la page retournée.

  • Inscrire le gestionnaire dans le fichier Global.asax.

  • Définir des chaînes personnalisées qui varient pour chaque profil de cache dans votre application Web. Le système passe ces chaînes au gestionnaire VaryByCustom, qui détermine comment faire varier le cache.

L'exemple de code fait varier le contenu en fonction de deux paramètres : le fait que le navigateur client prend ou non en charge les feuilles de style en cascade (CSS), et le fait que l'utilisateur actuel est ou non un administrateur. En fonction de la valeur de la chaîne personnalisée qui est passée à la méthode GetVaryByCustomString, la fonction construit une chaîne qui repose sur un seul des deux paramètres, sur les deux paramètres ou sur aucun des deux paramètres. Le système de mise en cache crée un cache distinct pour chaque valeur renvoyée par GetVaryByCustomString. Par exemple, si la valeur de custom est SupportsCSS, GetVaryByCustomString retourne une chaîne contenant True ou False, selon le résultat de sb.Append(context,Request.Browser.SupportsCss.ToString) : une qui prend en charge les feuilles de style en cascade et l'autre pas.

Vous pouvez spécifier la valeur de la chaîne personnalisée pour chaque profil de cache dans votre application Web, comme le montre l'exemple de code suivant :

[C#]

//First, write a VaryByCustom handler. This example varies based on
//two parameters: whether the client browser supports CSS,
//and whether the current user is an administrator.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint.Publishing;
using Microsoft.SharePoint.ApplicationRuntime;
using Microsoft.SharePoint;

namespace CacheDemo
{
    public class CacheDemoHttpApplication ; SPHttpApplication, IVaryByCustomHandler
    {
        internal const string MyVaryByString1 = "SupportsCSS";
        internal const string MyVaryByString2 = "SiteAdmin";
        public override void Init()
        {
            base.Init();
            this.RegisterGetVaryByCustomStringHandler((Microsoft.SharePoint.ApplicationRuntime.IVaryByCustomHandler)this);
        }

        public string GetVaryByCustomString(HttpApplication app, HttpContext context, string custom)
        {
            //The code looks for parameters specified in the cache 
            //profile that are passed to the handler and parses those 
            //delimited by a semicolon.
            StringBuilder sb = new StringBuilder();
            string[] strings = custom.Split(';');
            bool appended = false;
            foreach (string str in strings)
            {
                switch (str)
                {
                    case MyVaryByString1:
                        if (appended)
                        {
                            sb.Append(';');
                        }
                        //If you want to vary based on a property of
                        //the request, work with the http context
                    sb.Append(context.Request.Browser.SupportsCss);
                        break;
                    case MyVaryByString2:
                        if (appended)
                        {
                            sb.Append(';');
                        }
                        //If you want to vary by whether the current
                        //user is the site administrator,
                        //examine the SPContext
                        sb.Append(SPContext.Current.Web.UserIsSiteAdmin.ToString());
                        break;

                    default:
                        continue;
                }
                appended = true;
            }
            return sb.ToString();
        }
    }
}

Ensuite, enregistrez le gestionnaire d'événements VaryByCustom dans le fichier Global.asax. Vous devez modifier la balise Assembly pour spécifier l'assembly que vous créez avec le code précédent.

//Register the VaryByCustom string in the Global.asax file
<%@ Assembly Name="Microsoft.SharePoint"%>
<%@ Assembly Name="cachedemo"%>
<%@ Import Namespace="cachedemo" %>
<%@ Application Language="C#" Inherits="cachedemo.CacheDemoHttpApplication" %>

Enfin, spécifiez la valeur de la chaîne personnalisée pour chaque profil de cache dans votre application Web.

Modifier chaque profil de cache dans votre collection de sites

  1. Accédez au site racine de votre collection de sites.

  2. Cliquez sur Actions du site, pointez sur Paramètres du site, puis cliquez sur Modifier tous les paramètres du site.

  3. Cliquez sur Profils de cache de la collection de sites dans la section Administration de la collection de sites.

  4. Pointez sur le profil de cache que vous souhaitez modifier, cliquez avec le bouton droit, puis cliquez sur Modifier.

  5. Tapez la chaîne personnalisée que vous souhaitez ajouter dans le champ Variation par paramètre personnalisé, telle que SupportsCSS;SiteAdmin pour une utilisation avec cet exemple, puis cliquez sur OK.

Voir aussi

Autres ressources

Mise en cache de sortie et profils de cache
Vue d'ensemble de la mise en cache personnalisée
Cache d'objets