Расширение возможностей кэширование с помощью обработчика события VaryByCustom

Дата последнего изменения: 26 мая 2011 г.

Применимо к: SharePoint Server 2010

Для расширения возможностей кэширования и управления его параметрами используется интерфейс IVaryByCustomHandler. Свойство VaryByCustom — это компонент кэширования ASP.NET, используемый для кэширования нескольких версий выходных данных страницы на основе настраиваемых строк. Например, с помощью свойства VaryByCustom можно отображать кэшированные страницы с различным приветствием для каждого пользователя. Дополнительные сведения о функции VaryByCustom в ASP.NET см. в статье Кэширование выходных данных страницы, часть 1 на сайте MSDN.

В данном разделе рассматриваются три основных действия, которые необходимо выполнить для использования свойства VaryByCustom с целью расширения возможностей кэширования в Microsoft SharePoint Server 2010:

  • Создание обработчика VaryByCustom, предоставляющего список настраиваемых строк, используемых кэшем выходных данных для изменения контента возвращаемой страницы.

  • Регистрация обработчика в файле Global.asax.

  • Задание изменяемых настраиваемых строк для каждого профиля кэша в веб-приложении. Система передает эти строки обработчику VaryByCustom, который определяет изменение кэша.

В примере кода контент изменяется на основе двух параметров: поддержка клиентским браузером каскадных таблиц стилей (CSS) и наличие у текущего пользователя прав администратора. В зависимости от значения настраиваемой строки, передаваемой методу GetVaryByCustomString, функция формирует строку на основе одного, двух или ни одного из этих параметров. Система кэширования создает отдельный кэш для каждого значения, возвращаемого методом GetVaryByCustomString. Например, если параметру custom присвоено значение SupportsCSS, метод GetVaryByCustomString возвращает либо строку True, либо строку False, в зависимости от результата выполнения функции sb.Append(context,Request.Browser.SupportsCss.ToString): одно значение соответствует поддержке CSS, другое — отсутствию такой поддержки.

Как показано в приведенном ниже примере кода, для каждого профиля кэша в веб-приложении можно указать собственное значение настраиваемой стоки.

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

Затем необходимо зарегистрировать обработчик события VaryByCustom в файле Global.asax. Измените тег Assembly, указав сборку, построенную с на основе приведенного выше кода.

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

Наконец, укажите для каждого профиля кэша в веб-приложении значение настраиваемой строки.

Измените каждый профиль кэша в семействе сайтов

  1. Перейдите к корневому сайту семейства сайтов.

  2. Нажмите кнопку Действия сайта и последовательно выберите пункты Параметры сайта и Изменить все параметры сайта.

  3. В разделе Администрирование семейства сайтов выберите параметр Профили кэша семейства веб-сайтов.

  4. Выберите профиль кэша, который необходимо изменить, щелкните его правой кнопкой мыши, а затем выберите команду Изменить.

  5. Введите в поле В зависимости от настраиваемого параметра необходимую настраиваемую строку. В данном примере введите SupportsCSS;SiteAdmin. Нажмите кнопку ОК.

См. также

Концепции

Кэширование вывода и профили кэша

Общие сведения о настраиваемом кэшировании

Кэширование объектов