次の方法で共有


キャッシュ通知コールバックを追加する

Microsoft AppFabric 1.1 for Windows Server では、キャッシュが有効なアプリケーションでキャッシュ通知を受け取ることができます。このトピックでは、キャッシュ通知コールバックを追加してキャッシュ通知をアプリケーションで受け取れるようにする方法を説明します。キャッシュ通知の詳細については、「キャッシュ通知 (AppFabric 1.1 キャッシュ)」を参照してください。

キャッシュ通知コールバックを追加するには、2 つの手順を実行する必要があります。まず、1 つ以上のキャッシュ操作によってキャッシュ通知が発生したときに呼び出されるメソッドを作成します。キャッシュ通知によって呼び出されるメソッドは、DataCacheNotificationCallback の委任と同じパラメーターを受け付ける必要があります。次に、DataCache オブジェクトから利用可能な 3 つのメソッドのいずれかを使用して、コールバックを追加します。

キャッシュ通知が発生するキャッシュ操作の種類を定義するには、filter パラメーターを使用します。clientDelegate パラメーターには、最初の手順で作成したメソッドの名前を使用します。

ヒント

アプリケーションで通知を使用するには、名前付きキャッシュで通知を有効にする必要があります。New-Cache コマンドまたは Set-CacheConfig コマンドで notificationsEnabled パラメーターを使用してください。詳細については、「Windows PowerShell を使用した AppFabric 1.1 キャッシュ機能の管理」を参照してください。

1 つ以上のキャッシュ操作に対するコールバックを追加するには

  1. キャッシュ通知を発生させるメソッドを作成します。このメソッドは DataCacheNotificationCallback の委任と同じパラメーターを受け付けるようにします。

  2. コールバックを追加します。DataCache オブジェクトから利用可能な 3 つのメソッド (AddCacheLevelCallbackAddRegionLevelCallback、または AddItemLevelCallback) のいずれかを使用して、通知スコープを定義します。

    1. キャッシュ通知が発生するキャッシュ操作の種類を定義するには、filter パラメーターの DataCacheOperations 列挙を使用します。二項演算子の OR でビット単位の OR を実行して列挙を区別し、複数の列挙を選択します。これを実行するには、C# では | の文字を使用し、Visual Basic では Or 演算子を使用します。

    2. clientDelegate パラメーターには、キャッシュ通知が発生したときに呼び出すメソッドの名前を使用します。

    3. DataCacheNotificationDescriptor オブジェクトにもコールバック追加メソッドを設定します。このオブジェクトは、キャッシュ通知コールバックを削除するためにプログラムの他の場所で使用できます。

キャッシュ通知を登録する最初の手順は、通知によって呼び出されるメソッドを作成することです。通知によって呼び出されるメソッドは、DataCacheNotificationCallback の委任と同じパラメーターを受け付ける必要があります。次の例に、キャッシュ通知によって呼び出されるメソッドを示します。

'method invoked by notification "ndCacheLvlAllOps" 
Public Sub myCacheLvlDelegate(ByVal myCacheName As String, _
    ByVal myRegion As String, _
    ByVal myKey As String, _
    ByVal itemVersion As DataCacheItemVersion, _
    ByVal OperationId As DataCacheOperations, _
    ByVal nd As DataCacheNotificationDescriptor)

    'display some of the delegate parameters
    Console.WriteLine("A cache-level notification was triggered!")
    Console.WriteLine("    Cache: " + myCacheName)
    Console.WriteLine("    Region: " + myRegion)
    Console.WriteLine("    Key: " + myKey)
    Console.WriteLine("    Operation: " + OperationId.ToString())
    Console.WriteLine()
End Sub
//method invoked by notification "ndCacheLvlAllOps" 
public void myCacheLvlDelegate(string myCacheName,
    string myRegion, 
    string myKey, 
    DataCacheItemVersion itemVersion,
    DataCacheOperations OperationId, 
    DataCacheNotificationDescriptor nd)
{
    //display some of the delegate parameters
    Console.WriteLine("A cache-level notification was triggered!");
    Console.WriteLine("    Cache: " + myCacheName);
    Console.WriteLine("    Region: " + myRegion);
    Console.WriteLine("    Key: " + myKey);
    Console.WriteLine("    Operation: " + OperationId.ToString());
    Console.WriteLine();
}

2 番目の手順は、1 つ以上のキャッシュ操作に対するコールバックを追加することです。次の例では、通知が生成されて、前の例のメソッドを呼び出します。この通知はデモンストレーション専用であり、通知スコープがキャッシュレベルのあらゆるキャッシュ操作に対して構成されています。

複数のキャッシュ操作を定義するには、二項演算子の OR を使用して複数の DataCacheOperations 列挙を DataCacheOperations 変数に割り当てて、filter パラメーターで使用します。通知スコープがキャッシュレベルのキャッシュ操作に関するコールバックを追加するには、AddCacheLevelCallback メソッドを使用します。

ヒント

実稼働アプリケーションでこれを使用することはお勧めしません。この例は、デモンストレーション専用です。

'specify all possible item and region operations
Dim allCacheOperations As DataCacheOperations
allCacheOperations = DataCacheOperations.AddItem Or _
    DataCacheOperations.ReplaceItem Or _
    DataCacheOperations.RemoveItem Or _
    DataCacheOperations.CreateRegion Or _
    DataCacheOperations.ClearRegion Or _
    DataCacheOperations.RemoveRegion

'add cache-level notification callback 
'all cache operations from a notifications-enabled cache
Dim ndCacheLvlAllOps as DataCacheNotificationDescriptor = _
    myTestCache.AddCacheLevelCallback(allCacheOperations, AddressOf myCacheLvlDelegate)
//specify all possible item and region operations
DataCacheOperations allCacheOperations = DataCacheOperations.AddItem |
    DataCacheOperations.ReplaceItem |
    DataCacheOperations.RemoveItem |
    DataCacheOperations.CreateRegion |
    DataCacheOperations.ClearRegion |
    DataCacheOperations.RemoveRegion;

//add cache-level notification callback 
//all cache operations from a notifications-enabled cache
DataCacheNotificationDescriptor ndCacheLvlAllOps
    = myTestCache.AddCacheLevelCallback(allCacheOperations, myCacheLvlDelegate);

次の例では、通知スコープがリージョンレベルのキャッシュ操作に関するコールバックを追加する方法を示しています。これは、TestRegion という名前のリージョンがキャッシュに追加されたときにのみ発生するコールバックです。

'add region-level notification callback for region "TestRegion"
'trigger notification with CreateRegion operation
Dim ndRegionCreateRegOp As DataCacheNotificationDescriptor
ndRegionCreateRegOp = _
    myTestCache.AddRegionLevelCallback("TestRegion", _
    DataCacheOperations.CreateRegion, AddressOf myRegionLvlAddDelegate)
//add region-level notification callback for region "TestRegion"
//trigger notification with CreateRegion operation
DataCacheNotificationDescriptor ndRegionCreateRegOp
    = myTestCache.AddRegionLevelCallback("TestRegion",
    DataCacheOperations.CreateRegion, myRegionLvlAddDelegate);

次の例では、通知スコープがアイテムレベルのキャッシュ操作に関するコールバックを追加する方法を示しています。これは、TestKey というキーを使用してオブジェクトがキャッシュ内で追加または置き換えられたときにのみ発生するコールバックです。

ヒント

アイテムレベルのコールバックでキャッシュ通知を発生できるのは、アイテム操作の AddItemReplaceItem、および RemoveItem のみです。アイテムレベルのコールバックを追加したときに filter パラメーターにリージョン操作を指定すると、例外が発生します。

'add item-level notification callback for item "TestKey"
'trigger notification with AddItem and ReplaceItem operations
Dim ndItemUpdateOps As DataCacheNotificationDescriptor
ndItemUpdateOps = _
    myTestCache.AddItemLevelCallback("TestKey", _
    (DataCacheOperations.AddItem Or DataCacheOperations.ReplaceItem), _
    AddressOf myItemLvlUpdateDelegate)
//add item-level notification callback for item "TestKey"
//trigger notification with AddItem and ReplaceItem operations
DataCacheNotificationDescriptor ndItemUpdateOps
    = myTestCache.AddItemLevelCallback("TestKey",
        (DataCacheOperations.AddItem | DataCacheOperations.ReplaceItem),
        myItemLvlUpdateDelegate);

関連項目

概念

エラー通知コールバックの追加
キャッシュ通知コールバックの削除
キャッシュ通知のメソッド
Windows PowerShell を使用した AppFabric 1.1 キャッシュ機能の管理

  2012-03-05