サンプル: キャッシュ サービスおよび Silverlight の発行

最終更新日: 2011年4月20日

適用対象: SharePoint Server 2010

この記事の内容
PublishingCacheRESTServer
SilverlightNavigationControl
SilverlightContentQuery
サンプルのビルドと実行

C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples フォルダーの PublishingCacheServicesAndSilverlightControls.zip ファイルにあるサンプルには、相互に関連したサンプル プロジェクトが含まれています。それぞれ、PublishingCacheServiceAndSilverlightControls という Microsoft Visual Studio 2010 ソリューション内の個別のプロェクトです。プロジェクトについては、表 1 で説明します。

表 1. キャッシュ サービスの発行と Silverlight コントロール プロジェクト

プロジェクト

説明

PublishingCacheRESTService

Microsoft SharePoint Server 2010 プロジェクトとして実装される、Windows Communication Foundation (WCF) サービスで、サーバーのクロス リスト クエリ キャッシュからのデータをクエリするための複数の REST メソッドを含みます。クロス リスト クエリ キャッシュは、コンテンツ クエリ Web パーツ (CQWP)、サーバーのグローバルなナビゲーション プロバイダー、サーバーの現在のナビゲーション プロバイダー、およびサーバーの結合されたナビゲーション プロバイダー (既定では、これらはすべてナビゲーション機能で使用されます) によって使用される同じキャッシュ データ ストアです。

これらのデータ ストアはすべて、SharePoint Server 2010 フロントエンド サーバー上のメモリにキャッシュされます。ユーザーが、ほとんど、または常に読み取りを行っている状況で、ナビゲーション データとサイト コンテンツを効率的に取得します。

SilverlightNavigationControl

PublishingCacheRESTService から返されたナビゲーション データをナビゲーション コントロールにレンダリングする Silverlight アプリケーション。

SilverlightContentQuery

PublishingCacheRESTService によって返された SharePoint Server 2010 クロス リスト クエリに基づいて結果の一覧を表形式で表示する Silverlight アプリケーション。

PublishingCacheRESTServer

このプロジェクトは、複数の操作を含む単一の WCF サービスとして実装されます。

GetGlobalNav メソッド、GetCurrentNav メソッド、および GetCombinedNav メソッド

GetGlobalNav メソッド、GetCurrentNav メソッド、および GetCombinedNav メソッドは、getNav と呼ばれる単一のヘルパー メソッドによって実装されます。getNav は、SharePoint Server 2010 内に既定で提供されている適切な PortalSiteMapProvider オブジェクトを入力として取ります。

getNav メソッドは、現在の URL のすべての PortalSiteMapNode オブジェクトからプロバイダー内のそのすべての子孫までを繰り返し処理し、それらを XML フラグメントにシリアライズします。XML フラグメントには、各 PortalSiteMapNode オブジェクトのタイトル、説明、および URL を含みます。

GetDefaultContentQuery と doCustomContentQuery

GetDefaultContentQuery メソッドと doCustomContentQuery メソッドは、基準となる同じメソッド (doCustomContentQuery) によって実装されます。doCustomContentQuery メソッドは、キャッシュされたクロス リスト クエリを CrossListQuery クラス経由で実行するために使用されるすべてのパラメーターを入力として取り、キャッシュされたクエリの結果を表す XML フラグメントを返します。

getDefaultContentQuery メソッドはパラメーターを取らず、単に、ハードコードされたパラメーターのセットでクロス リスト クエリを実行して返します。他のハードコードされたクエリ サービスを作成するために、テンプレートとして使用されることが、このメソッドの主な目的です。

WCF サービスの展開と使用

このプロジェクトは、ファームを対象とした SharePoint Server 2010 機能を使用して WCF サービスを展開します。この機能は、SharePoint Server 2010 と Visual Studio 2010 を統合して利用できるようになります。

このサービスは、SharePoint Server 2010 の ISAPI フォルダーに展開されます。このフォルダーは、_vti_bin 仮想フォルダー URL 経由でアクセスされます。したがってサービスへの URL の形式は、http://<server>/<webUrl>/_vti_bin/PublishingCache.svc になります。

サービスが展開されたら、表 2 で示す URL とパラメーターを使用して、メソッドにアクセスします。

表 2. WCF サービスの URL とパラメーター

サービス

エンドポイント相対 URL

HTTP メソッド

ヘッダー

getGlobalNav

/GlobalNav

GET

該当なし。

getCurrentNav

/CurrentNav

GET

該当なし。

getCombinedNav

/CombinedNav

GET

該当なし。

getDefaultContentQuery

/ContentQuery

GET

該当なし。

doCustomContentQuery メソッドは、表 3 に示されているパラメーターを取ります。

表 3. doCustomContentQuery パラメーター値

パラメーター

エンドポイント相対 URL

/ContentQuery

HTTP メソッド

POST

ヘッダー

ヘッダーはすべてオプションです。

  1. ViewFields: 表示対象のセミコロンで区切られたフィールドの一覧 (既定: Title;FileRef)

  2. RowLimit: 返す行数 (既定: 50)。

  3. Web: クエリの範囲 (既定: Recursive)

  4. Lists: クエリに追加するリストのリスト テンプレート値 (既定: 850)

  5. WebUrl: クエリのサイトコレクション相対 URL (既定: "/")

要求本文

実行するクエリの Collaborative Application Markup Language (CAML)。つまり CrossListQueryInfo オブジェクトでクエリ値として使用される値。

本文のコンテンツ タイプ

text/plain

SilverlightNavigationControl

この Silverlight アプリケーションは、PublishingCacheRESTService を使用して NavigationProvider オブジェクトからデータを取得し、それを 2 つのレベルのナビゲーション表示にレンダリングします。最上位レベルには現在の場所とその直接の子孫、各サイトのタイトルが表示されます (さらに各サイトの説明がヒントとして表示されます)。ユーザーが最上位レベルのノード上にマウスを置くと、最下位レベルには、マウスが置かれたノードの子のノードが表示されます。

最上位レベルまたは最下位レベルのノードをクリックすると、ブラウザーは選択されたノードの URL に移動します。

SilverlightNavigationControl の展開と使用

プロジェクトをビルドし、作成された .xap ファイルを SharePoint Server 2010 を実行しているサーバーの場所に展開します。2 つの標準的な方法 (Silverlight Web パーツを使用する、または SharePoint Server 2010 ページの HTML マークアップに <object> タグを手動で追加する) で、アプリケーションを使用できます。通常、SilverlightNavigationControl は、SharePoint Server 2010 サイト用のマスター ページにアプリケーションを追加するため、アプリケーションは、マスター ページを使用するすべてのページで一貫した場所に表示されます。

表 4. cacheServiceUri パラメーター値

パラメーター名

必須

cacheServiceUri

はい

NavigationProvider オブジェクトから要求されたデータを返す PublishingCacheRESTService への URL。

現在のページに相対的なサイト階層を表示するナビゲーション プロバイダーの場合、URL は相対 URL (例: _vti_bin/PublishingCache.svc) として指定する必要があります。

絶対階層を表示するナビゲーション プロバイダーの場合 (特定の場所に相対的な階層を常に表示するナビゲーション プロバイダーの場合)、URL は絶対 URL (例: https://server/_vti_bin/PublishingCache.svc) またはサーバー相対 URL (例: /_vti_bin/PublishingCache.svc) として指定する必要があります。

SilverlightContentQuery

このアプリケーションは、クロス リスト クエリ データを表示し、クエリ データ結果を Microsoft Translator HTTP サービスを使用してユーザー固有のデータに変換します。

SilverlightContentQuery の展開と使用

このアプリケーションは、表 5 に示す初期化パラメーターに基づき、PublishingCacheRESTService の doCustomContentQuery メソッドを使用して、キャッシュされたクロス リスト クエリを実行し、その結果を表形式で表示します。各結果行の最初の列はクリック可能なハイパーリンクです。各行の URL は、初期化パラメーターで指定されているように、各アイテムの列値です。

アプリケーションは、Microsoft Translator サービスを使用して、表示されたデータを [変換先] ドロップダウン リストで利用できる任意の言語に変換します。このリストには、Microsoft Translator にサポートされている言語のリストに基づいて動的にデータが入力されます。

2 つの標準的な方法 (Silverlight Web パーツを使用するか、SharePoint Server 2010 ページの HTML マークアップに <object> タグを手動で追加する) で、アプリケーションを使用できます。

表 5. SilverlightContentQuery 初期化パラメーター

パラメーター名

必須

使用例

既定値 (不要なパラメーターのみ)

TranslatorAppId

はい

Microsoft Translator サービスの AppId。AppId を取得するには、MSDN の記事 Getting Started with Microsoft Translator [https://msdn.microsoft.com/ja-jp/library/dd575235.aspx] を参照してください。

該当なし。

cacheServiceUri

はい

PublishingCacheRESTService の doCustomContentQuery メソッドへの URL (例: https://server/PublishingCache.svc/ContentQuery)。

URL を、相対、サーバー相対、または絶対として指定します。

該当なし。

Query

はい

実行するクエリの Collaborative Application Markup Language (CAML)。表 3 の doCustomContentQuery の Request Body パラメーターについての説明を参照してください。

該当なし。

ViewFields

はい

表示対象のセミコロンで区切られたフィールドのリスト。表 3 の doCustomContentQuery メソッドのパラメーターの説明を参照してください。

該当なし。

UrlField

いいえ

ユーザーが表示された結果テーブルの行をクリックしたときの移動先となる URL を含むフィールド。

URL

RowLimit

いいえ

返す行数。表 3 の doCustomContentQuery パラメーターの説明を参照してください。

該当なし。値が指定されていない場合、サービスは既定値を提供します。

Web

いいえ

クエリの範囲。

該当なし。値が指定されていない場合、サービスは既定値を提供します。

Lists

いいえ

クエリに追加するリストのリスト テンプレート値。

該当なし。値が指定されていない場合、サービスは既定値を提供します。

WebUrl

いいえ

クエリに使用される Web のサイト コレクション相対 URL。

該当なし。値が指定されていない場合、サービスは既定値を提供します。

ShowHeaderRow

いいえ

TRUE に設定されると、ViewFields の列名を結果テーブルにヘッダー行として表示します。それ以外の場合は、false に設定します。

TRUE

注意

多くのパラメーターの詳細は、doCustomContentQuery メソッド セクションの説明を参照してください。

サンプルのビルドと実行

以下の手順に従って、開発サイトまたはテスト サイトでこのプロジェクトをテストできます。

サンプルのビルド

このセクションの情報は、WCF REST サービスを使用するプロジェクトで使用できます。サンプルを実行するには、最初に、WCF および Visual Studio 2010 と SharePoint Server 2010 との統合を使用して、WCF REST サービスを、SharePoint Server 2010 に展開できるホストにする必要があります。

WCF REST サービスを、SharePoint サーバーに展開できるホストになるように設定するには

  1. **空の SharePoint プロジェクト タイプのプロジェクトに、WCF サービスを作成します。**このプロジェクトを使用すると、サービスは自動的にパッケージ化され、SharePoint Server 2010 にソリューションとして展開されます。

    プロジェクトでは、Microsoft.SharePoint.Client.ServerRunTime.dll ファイルに参照を追加します。

  2. ファイルを参照して、手動でファイル参照を追加します。Visual Studio 2010で [参照の追加] ダイアログ ボックスを開き、[参照] タブをクリックして、C:\Windows\assembly\GAC_MSIL\Microsoft.SharePoint.Client.ServerRuntime\ フォルダーを参照します。

  3. .svc ファイルを編集します。 サービスの Factory 属性を、WCF サービスをホストするための新しい SharePoint 要素 (Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c") に変更します。

  4. Visual Studio 2010 で、*.sln ファイルを開きます。Visual Studio 2010 の [プロパティ] ウィンドウで、サイト URL 値を開発テスト サイトの絶対アドレスに変更します。たとえば、http://MyDevServer/ のように変更します。閉じスラッシュを必ず含めてください。

    個別のアセンブリ参照を作成する代わりに、Service 属性を変更して参照をプロジェクト アセンブリに含めます。SharePoint Server 2010 では、ソリューションが展開されるときに参照が入力されます。具体的には、$SharePoint.Project.AssemblyFullName$ 参照を含めます。

    .svc ファイルに既に Assembly が含まれている場合は、Assembly 要素を削除します。

  5. **ISAPI マップ フォルダーをプロジェクトに追加し、ファイルをそのフォルダーに移動します。**Visual Studio 2010 で、プロジェクトを右クリックして、[追加] をクリックします。[SharePoint のマップされたフォルダー] をクリックして、ISAPI フォルダーを選択します。

    .svc ファイルと .cs 分離コード ファイルを、 プロジェクトの ISAPI マップ フォルダーに移動します。

  6. .csproj ファイルを更新します。.csproj ファイルをクリックして、指示されたら、メモ帳を選択してそのファイルを開きます。

    <TokenReplacementFileExtensions>svc</TokenReplacementFileExtensions> を PropertyGroup 要素に追加します。

サンプルの実行

ソリューションがビルドされ展開されると、WCF REST サービスは、SharePoint Server 2010 を実行しているサーバーのクロス リスト クエリ キャッシュからのデータをクエリします。次に、結果を Silverlight ナビゲーション コントロールにレンダリングし、PublishingCacheRESTService から返されるクロス リスト クエリの結果に基づいて、その結果をテーブルに表示できます。

関連項目

概念

エンタープライズ コンテンツ管理のサンプル

オブジェクト キャッシュ

[方法] ナビゲーションをカスタマイズする

ナビゲーション コントロールおよびプロバイダーをカスタマイズする