Поделиться через


Добавление обратного вызова уведомления кэша

Microsoft AppFabric 1.1 для Windows Server позволяет приложениям с поддержкой кэша принимать уведомления кэша. В данном разделе описывается добавление ответного уведомления кэша, который позволяет приложению получать уведомления кэша. Дополнительные сведения об уведомлениях кэша см. в статье Уведомления кэша (кэширование в AppFabric 1.1).

Добавление ответного уведомления кэша включает в себя два этапа. Во-первых, создайте метод, который должен вызываться при активации уведомления кэша одной или несколькими операциями кэша. Этот метод, вызываемый уведомлениями кэша, должен принимать те же параметры, что и делегат DataCacheNotificationCallback. Во-вторых, добавьте обратный вызов, используя один из трех доступных методов из объекта DataCache:

Используйте параметр filter для определения типов операций кэша, которые должны активировать уведомления кэша. Используйте для параметра clientDelegate имя метода, созданного на первом этапе.

Примечание

Чтобы приложение использовало уведомления, необходимо включить их в именованном кэше. Используйте параметр notificationsEnabled с командами New-Cache или Set-CacheConfig. Дополнительные сведения см. в разделе Использование Windows PowerShell для управления компонентами кэширования в AppFabric 1.1.

Добавление обратного вызова для одной или нескольких операций кэша

  1. Создайте метод, который должен активироваться уведомлением кэша. Убедитесь, что этот метод принимает те же параметры, что и делегат DataCacheNotificationCallback.

  2. Добавьте обратный вызов. Используйте один из трех доступных методов из объекта DataCache для определения области уведомлений: AddCacheLevelCallback, AddRegionLevelCallback или AddItemLevelCallback.

    1. Используйте перечисление DataCacheOperations в параметре filter для определения типа операций кэша, которые должны активировать уведомления. Выберите несколько перечислений, разделяя их двоичным оператором OR для выполнения битовой операции OR. Для этого используйте знак "|" в C# и оператор "Or" в Visual Basic.

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

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

Чтобы задать несколько операций кэша, можно использовать двоичный оператор OR для назначения нескольких перечислений DataCacheOperations переменной DataCacheOperations, которая может использоваться в качестве параметра фильтра. Чтобы добавить обратный вызов для операций кэша с областью уведомлений уровня кэша, используйте метод 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.

Примечание

Уведомления кэша с обратными вызовами уровня элемента могут активировать только операции над элементами AddItem, ReplaceItem и RemoveItem. Указание в параметре фильтра операций области при добавлении обратного вызова уровня элемента приводит к возникновению исключения.

'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