Compartir vía


Adición de una devolución de llamada de notificación de caché

Microsoft AppFabric 1.1 para Windows Server permite a la aplicación habilitada para caché recibir notificaciones de caché. En este tema se describe cómo agregar una devolución de llamada de notificación de caché que permitirá a la aplicación recibir notificaciones de caché. Para obtener más información acerca de las notificaciones de caché, vea Notificaciones de caché (Almacenamiento en caché de AppFabric 1.1).

La agregación de una devolución de llamada de notificación de caché requiere dos pasos. En primer lugar, cree un método que deba invocarse cuando una o varias operaciones de caché desencadenen una notificación de caché. El método que invoque con las notificaciones de caché deberá aceptar los mismos parámetros que el delegado de DataCacheNotificationCallback. En segundo lugar, debe agregar una devolución de llamada mediante uno de los tres métodos disponibles desde el objeto DataCache:

Use el parámetro filter para definir los tipos de operaciones de caché que desea que activen notificaciones de caché. Use el nombre del método que creó en el primer paso para el parámetro clientDelegate.

Nota

Para que la aplicación pueda usar notificaciones, debe habilitarlas en una memoria caché designada. Use el parámetro notificationsEnabled con los comandos New-Cache o Set-CacheConfig. Para obtener más información, vea Uso de Windows PowerShell para administrar características de almacenamiento en caché de AppFabric 1.1.

Procedimiento para agregar una devolución de llamada para una o varias operaciones de caché

  1. Cree el método que desea que active la notificación de caché. Asegúrese de que el método acepte los mismos parámetros que el delegado de DataCacheNotificationCallback.

  2. Agregue una devolución de llamada. Use uno de los tres métodos disponibles del objeto DataCache para definir el ámbito de notificación: AddCacheLevelCallback, AddRegionLevelCallback o AddItemLevelCallback.

    1. Use la enumeración DataCacheOperations del parámetro filter para especificar el tipo de operaciones de caché que desea que activen notificaciones. Seleccione más de una enumeración. Para ello, sepárelas mediante el operador binario OR de modo que se realizará una operación OR de bit a bit. Para hacerlo, use el carácter | en C# y el operador Or en Visual Basic.

    2. Use el nombre del método que desea invocar cuando se produzcan estas notificaciones en el parámetro clientDelegate.

    3. Defina el método para agregar devolución de llamada igual a un objeto DataCacheNotificationDescriptor que puede usar en cualquier otra parte del programa para quitar la devolución de llamada de notificación de caché.

Ejemplo

El primer paso al registrarse para notificaciones de caché es crear el método que la notificación debe invocar. El método al que llama la notificación debe aceptar los mismos parámetros que el delegado de DataCacheNotificationCallback. En este ejemplo se muestra un método que puede invocar una notificación de caché.

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

El segundo paso es agregar una devolución de llamada para una o varias operaciones de caché. En este ejemplo, se crea una notificación para invocar al método del ejemplo anterior. Exclusivamente para la demostración, esta notificación se configuró para todas las posibles operaciones de caché con un ámbito de notificación en el nivel de caché.

Para definir más de una operación de caché, puede usar el operador binario OR con el fin de asignar más de una enumeración DataCacheOperations a una variable DataCacheOperations que puede usarse para el parámetro de filtro. Para agregar una devolución de llamada para operaciones de caché con un ámbito de notificación en el nivel de caché, use el método AddCacheLevelCallback.

Nota

No es recomendable hacer esta operación en una aplicación de producción. Este ejemplo sirve únicamente como demostración.

'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);

En el siguiente ejemplo se muestra el resultado de agregar una devolución de llamada para una operación de caché con un ámbito de notificación en el nivel de región, que solamente se activa cuando se agrega a la memoria caché una región denominada 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);

En el siguiente ejemplo se muestra el resultado de agregar una devolución de llamada para operaciones de caché con un ámbito de notificación en el nivel de elemento, que solamente se activa cuando se agrega o se reemplaza un objeto en la memoria caché mediante la clave TestKey.

Nota

Solo las operaciones de elemento AddItem, ReplaceItem y RemoveItem pueden desencadenar las notificaciones de caché con devoluciones de llamada de nivel de elemento. Al agregar una devolución de llamada en el nivel de elemento, especificar operaciones de región en el parámetro de filtro provocará una excepción.

'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);

Vea también

Conceptos

Agregar una devolución de llamada de notificación de error
Eliminación de una devolución de llamada de notificación de caché
Métodos de notificaciones de caché
Uso de Windows PowerShell para administrar características de almacenamiento en caché de AppFabric 1.1

  2012-03-05