Procedimiento para extender el almacenamiento en memoria caché mediante el controlador de eventos VaryByCustom

Última modificación: jueves, 26 de mayo de 2011

Hace referencia a: SharePoint Server 2010

Es posible extender y manipular el almacenamiento en caché mediante la creación de una interfaz IVaryByCustomHandler. VaryByCustom es una característica de almacenamiento en caché de ASP.NET que se puede usar para almacenar en caché varias versiones del resultado de una página, en función de las cadenas personalizadas. Por ejemplo, puede usar VaryByCustom si desea ver páginas almacenadas en caché que muestran una cadena de bienvenida distinta para cada usuario. Para obtener más información acerca de VaryByCustom en ASP.NET, vea la primera parte del artículo sobre almacenamiento en caché de resultados de página en MSDN.

En este tema se tratan los tres pasos básicos necesarios para usar la propiedad VaryByCustom a fin de extender el almacenamiento en memoria caché en Microsoft SharePoint Server 2010.

  • Crear un controlador VaryByCustom que proporciona una lista de cadenas personalizadas que usa la memoria caché de resultados para variar el contenido de la página devuelta.

  • Registrar el controlador en el archivo Global.asax.

  • Definir cadenas personalizadas que deben variar para cada perfil de caché de la aplicación web. El sistema pasa estas cadenas al controlador VaryByCustom, que determina cómo variar la memoria caché.

En el código de ejemplo, varía el contenido según dos parámetros: si el explorador cliente admite hojas de estilos en cascada (CSS), y si el usuario actual es un administrador. En función del valor de la cadena personalizada que se pasa al método GetVaryByCustomString, la función construye una cadena que se basa en uno, ambos o ninguno de estos parámetros. El sistema de almacenamiento en memoria caché crea una caché independiente para cada valor que devuelva GetVaryByCustomString. Por ejemplo, si el valor de custom es SupportsCSS, GetVaryByCustomString devuelve una cadena con el valor True o False, según el resultado de sb.Append(context,Request.Browser.SupportsCss.ToString): una que es compatible con CSS y una que no.

Puede especificar el valor de la cadena personalizada para cada perfil de memoria caché en la aplicación web, tal como se muestra en el código de ejemplo siguiente:

//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 them, 
            //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();
        }
    }
}

A continuación, registre el controlador de eventos VaryByCustom en el archivo Global.asax. Debe modificar la etiqueta de ensamblado para especificar el ensamblado que se genera con el código anterior.

//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" %>

Por último, especifique el valor de cadena personalizada de cada perfil de memoria caché en la aplicación web.

Modificación de cada perfil de memoria caché de su colección de sitios

  1. Desplácese hasta el sitio raíz de la colección de sitios.

  2. Haga clic en Acciones del sitio, elija Configuración del sitio y, a continuación, haga clic en Modificar toda la configuración del sitio.

  3. En la sección Administración de la colección de sitios, haga clic en Perfiles de caché de la colección de sitios.

  4. Elija el perfil de memoria caché que desea modificar, haga clic con el botón secundario y, a continuación, haga clic en Editar.

  5. En el campo Variar por parámetro personalizado, escriba la cadena personalizada que desea agregar. En este ejemplo, escriba SupportsCSS;SiteAdmin. Haga clic en Aceptar.

Vea también

Conceptos

Almacenamiento en la memoria caché de resultados y los perfiles de memoria caché

Introducción al almacenamiento en memoria caché personalizado

Almacenamiento en caché de objetos