DataCacheStoreProvider クラスの拡張 (AppFabric 1.1 キャッシュ)

このトピックでは、Windows Server AppFabric キャッシュ のリード スルー/ライト ビハインド プロバイダーを作成する方法について説明します。プロバイダーを作成するには、抽象型基本クラス DataCacheStoreProvider を実装します。

プロバイダー プロジェクトを作成する

  1. Visual Studio 2010 で、新しいクラス ライブラリ プロジェクトを作成します。

  2. Microsoft.ApplicationServer.Core.dll アセンブリへの参照を追加します。既定で、このアセンブリは .\Program Files\Windows Server AppFabric にあります。

  3. このプロジェクトのソース ファイルを開きます。ファイルはプロジェクトの言語に応じて Class1.cs または Class1.vb です。

  4. ソース ファイルの先頭に、Microsoft.ApplicationServer.Caching 名前空間に対する using ステートメント (Visual Basic では Imports) を追加します。

    using Microsoft.ApplicationServer.Caching;
    
    Imports Microsoft.ApplicationServer.Caching
    
  5. DataCacheStoreProvider から継承するようにクラスを変更します。Visual Studio 2010 コード エディターには、このクラスから空の関数を自動的に作成する機能があります。Visual C# では、DataCacheStoreProvider クラスを右クリックし、[抽象クラスの実装] を選択します。Visual Basic では、Inherits 行の後に Enter キーを押します。

    namespace RTProvider
    {
        public class Provider : DataCacheStoreProvider
    
    Public Class Provider
        Inherits DataCacheStoreProvider
    
  6. 厳密な名前でグローバル アセンブリ キャッシュにアセンブリをインストールするために、アセンブリに署名します。ソリューション エクスプローラーで、プロジェクトを右クリックし、[プロパティ] を選択します。プロジェクト プロパティの [署名] セクションで、[アセンブリの署名] チェック ボックスをオンにします。[厳密な名前のキー ファイルを選択してください] ボックスの一覧で既存のキー ファイルを選択するか、[<新規作成>] を選択して新しいキー ファイルを作成します。

パブリック コンストラクターを追加する

各プロバイダーは、次のように署名したパブリック コンストラクターを実装する必要があります。

public ProviderClass(string cacheName, Dictionary<string,string> config)

上記の例の ProviderClass は、DataCacheStoreProvider のメソッドを実装する実際のクラス名で置き換えます。このコンストラクターは、実行中のキャッシュ ホストでキャッシュが初めてリード スルーまたはライト ビハインドを有効にしたときに呼び出されます。また、キャッシュ ホストが再起動するたびに呼び出されます。このコンストラクターには次の 2 つのパラメーターがあります。

パラメーター 説明

cacheName

この string は、このプロバイダーと関連付けられているキャッシュの名前です。この名前を格納して、後で使用することができます。たとえば、読み取り要求に応じて新しい DataCacheItem オブジェクトを作成するときは、キャッシュ名を知っている必要があります。

config

Dictionary<string,string> オブジェクトには、プロバイダーの構成設定が含まれます。これらの設定は、プロバイダーおよび実行時のプロバイダーの構成ニーズに応じたカスタム値です。この設定は、New-Cache または Set-CacheConfig Windows PowerShell コマンドの ProviderSettings パラメーターを使用して渡されます。

プロバイダー メソッドを実装する

プロバイダーは、DataCacheStoreProvider クラスのメソッドを実装する必要があります。リード スルー プロバイダーのみを作成する場合は、"Write" メソッドを実装する必要はありません。同様に、ライト ビハインド プロバイダーのみを作成する場合は、"Read" メソッドを実装する必要はありません。

一般的に、メソッド名でその用途がわかります。次の表では、オーバーロードについて含めずにメソッドを説明します。

メソッド 説明

Read

キャッシュ クライアントが、関連するキャッシュに現在存在していないキャッシュ済み項目を要求するときに呼び出されます。

Write

キャッシュ クライアントがキャッシュ内の項目を追加または変更したときに呼び出されます。

Delete

キャッシュ クライアントが関連するキャッシュから項目を削除したときに呼び出されます。

Dispose

プロバイダーを破棄します。

読み取りには 2 つのメソッドがあります。1 つ目の Read メソッドには、返す 1 つの項目を指定する DataCacheItemKey パラメーターが渡されます。DataCacheItemKey および DataCacheItem オブジェクトの Dictionary を使って取得と戻す処理を実行できるように、もう 1 つの Read オーバーロードには、DataCacheItemKey オブジェクトのコレクションが渡されます。このディクショナリ オブジェクトは最初は空です。また、読み取り項目は、Read メソッドから実行する前に追加する必要があります。次の例のように、DataCacheItemFactory クラスを使用して要求された項目を作成します。

DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);

前の例では、オーバーロードしたコンストラクターに以前渡したキャッシュ名に CACHE_NAME 文字列を設定する必要があります。key は、要求された DataCacheItemKey です。objectValue は、このキャッシュ キーのクライアントに返す必要があるオブジェクトです。

同様に、書き込みには 2 つのメソッドがあります。1 つ目の Write メソッドには、DataCacheItem オブジェクトが渡されます。このオブジェクトの Key プロパティには、関連する DataCacheItemKey が含まれます。また、Value プロパティには値が含まれます。もう 1 つの Write メソッドには、DataCacheItemKey および DataCacheItem オブジェクトの Dictionary が渡されます。

重要

バックエンド ストアに項目を書き込むときは、Dictionary<DataCacheItemKey, DataCacheItem> オブジェクトから項目を削除する必要があります。項目が削除されていない場合、キャッシュは書き込みの失敗と見なし、その処理を後で再試行します。

エラー処理

エラーが発生した場合は、DataCacheStoreException 例外オブジェクトをスローできます。この例外の結果は、Read メソッドと Write メソッドのどちらで例外が発生したかによって変わります。次の表は、これらの違いについて説明しています。

メソッド スローされた例外の結果

Read

読み取りを実行するキャッシュ クライアントは、ErrorCode プロパティが DataCacheErrorCode.ReadThroughProviderFailure と同じ DataCacheException 例外を受け取ります (例外のテキストにはコード "<ERRCA0025>" が含まれます)。

Write

この書き込みは失敗したと仮定され、ライト ビハインド処理に関するキャッシュの再試行ポリシーに基づいて再試行されます。キャッシュ クライアントは、このエラーについて通知されません。

キャッシュ クライアントが、リード スルー プロバイダーにアクセスする DataCache.Get の呼び出し時に受け取る可能性がある DataCacheErrorCode 値は 3 つあります。

  1. DataCacheErrorCode.ReadThroughProviderFailure

  2. DataCacheErrorCode.ReadThroughProviderDidNotReturnResult

  3. DataCacheErrorCode.ReadThroughProviderNotFound

また、プロバイダーの Read メソッドにかかる時間は、DataCache.Get メソッドの合計要求時間に追加される点についても注意してください。そのため、場合によっては、プロバイダーで発生する遅延を考慮して要求のタイムアウトを増やす必要があります。詳細については、「キャッシュ クライアントのタイムアウトを構成する (Windows Server AppFabric キャッシュ)」を参照してください。

プロバイダーのテストとデバッグ

開発とテストの場合、開発コンピューターに単一ノードのキャッシュ クラスターを設定する方がよいこともあります。この方法で、再ビルド、ローカルのグローバル アセンブリ キャッシュへのアセンブリの再追加、およびローカル キャッシュ クラスターの再起動をすばやく実行できます。次に、プロバイダーをデバッグする手順について説明します。

  1. Visual Studio 2010 でプロバイダー プロジェクトを開きます。

  2. [デバッグ] メニューの [プロセスにアタッチ] をクリックします。

  3. [すべてのユーザーからのプロセスを表示する] と [すべてのセッションのプロセスを表示する] をオンにします。

  4. DistributedCacheService.exe プロセスを選択します。

  5. [アタッチ] ボタンをクリックします。

  6. プロバイダー コードにブレークポイントを設定し、別のアプリケーションのキャッシュに対する処理を実行します。その結果、プロバイダー メソッドが呼び出されます。

警告

デバッガーのアタッチを解除せずにデバッグ セッションを停止すると、そのコンピューターのキャッシュ サービスは停止します。その結果、そのコンピューターにキャッシュされているすべてのデータは失われます。

関連項目

概念

リード スルー/ライト ビハインド プロバイダーの展開 (AppFabric 1.1 キャッシュ)
キャッシュでのリード スルーおよびライト ビハインドの有効化 (AppFabric 1.1 キャッシュ)

  2012-03-05