VaryByCustom イベント ハンドラーを使用してキャッシュを拡張する
最終更新日: 2011年5月26日
適用対象: SharePoint Server 2010
IVaryByCustomHandler インターフェイスを作成して、キャッシュの拡張と操作を実行できます。ASP.NET キャッシュ機能である VaryByCustom を使用すると、カスタム文字列に基づいて、複数のバージョンのページ出力をキャッシュすることができます。たとえば、各ユーザーに異なるウェルカム文字列を表示するキャッシュ ページを表示したい場合、VaryByCustom を使用できます。ASP.NET の VaryByCustom の詳細については、MSDN の記事「ページ出力キャッシュ - 第 1 部」を参照してください。
このトピックでは、Microsoft SharePoint Server 2010 のキャッシュを拡張する VaryByCustom プロパティを使用するために必要な 3 つの基本ステップについて説明します。
返されるページ上のコンテンツを変更するために出力キャッシュが使用する、カスタム文字列のリストを示す VaryByCustom ハンドラを作成します。
Global.asax ファイルにハンドラを登録します。
カスタム文字列を定義して、Web アプリケーションのキャッシュ プロファイル向けに変更します。システムは、キャッシュを変更する方法を決定する VaryByCustom ハンドラに、これらの文字列を渡します。
サンプル コードでは、クライアント ブラウザがカスケード スタイル シート (CSS) をサポートしているかどうか、現在のユーザーが管理者かどうかという 2 つのパラメータに基づいてコンテンツが異なります。GetVaryByCustomString メソッドに渡されるカスタム文字列の値に応じて、関数はこれらのパラメータのいずれかまたは両方に基づく文字列、またはどちらにも基づかない文字列を構成します。キャッシュ システムでは、GetVaryByCustomString が返す各値とは異なるキャッシュを作成します。たとえば、custom の値が SupportsCSS の場合、GetVaryByCustomString は、True または False を含む文字列を返します。これは、sb.Append(context,Request.Browser.SupportsCss.ToString) の結果が CSS をサポートしているか、していないかを示しています。
Web アプリケーションの各キャッシュ プロファイル向けのカスタム文字列の値は、次のコード例に示すように指定することができます。
//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();
}
}
}
次に、Global.asax ファイルに VaryByCustom イベント ハンドラを登録します。アセンブリ タグを変更して、上記のコードで構築するアセンブリを指定する必要があります。
//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" %>
最後に、Web アプリケーションの各キャッシュ プロファイルに対して、カスタム文字列の値を指定します。
サイト コレクション内の各キャッシュ プロファイルを編集します。
サイト コレクションのルート サイトに移動します。
[サイトの操作] をクリックし、[サイトの設定] をポイントして、[すべてのサイト設定の変更] をクリックします。
[サイト コレクションの管理] セクションの [サイト コレクションのキャッシュ プロファイル] をクリックします。
変更するキャッシュ プロファイルをポイントし、右クリックしてから [編集] をクリックします。
SupportsCSS;SiteAdmin など、この例で使用するために [ユーザー設定のパラメーターごとにキャッシュ] フィールドに追加するカスタム文字列を入力して、[OK] をクリックします。