Procedura: Ricevere notifiche da una cache di Azure In-Role

Importante

Microsoft consiglia tutti i nuovi sviluppi di usare Cache Redis di Azure. Per la documentazione e le indicazioni correnti sulla scelta di un'offerta di Cache di Azure, vedere Quale offerta di Cache di Azure è adatta per l'utente?

Questo argomento descrive come aggiungere un callback di notifica cache che consenta all'applicazione di ricevere le notifiche cache.

L'aggiunta di un callback di notifica cache richiede due passaggi, il primo dei quali consiste nella creazione di un metodo da chiamare quando una o più operazioni cache attivano una notifica cache. Il metodo richiamato con le notifiche della cache deve accettare gli stessi parametri del delegato DataCacheNotificationCallback . In secondo luogo, aggiungere un callback usando uno dei tre metodi disponibili dall'oggetto DataCache :

Usare il parametro filter per definire i tipi di operazioni cache che devono attivare le notifiche cache. Per il parametro clientDelegate ricorrere al nome del metodo creato durante il primo passaggio.

Per aggiungere un callback per una o più operazioni cache

  1. Creare il metodo che si desidera venga attivato dalla notifica cache. Verificare che il metodo accetti gli stessi parametri del delegato DataCacheNotificationCallback.

  2. Aggiungere un callback. Utilizzare uno dei tre metodi disponibili dell'oggetto DataCache per definire l'ambito di notifica: AddCacheLevelCallback, AddRegionLevelCallback o AddItemLevelCallback.

    1. Usare l'enumerazione DataCacheOperations nel filter parametro per specificare il tipo di operazioni della cache da attivare. Selezionare più di un'enumerazione separandole con l'operatore binario OR per eseguire un OR bit per bit. Per effettuare questa operazione, ricorrere al carattere | in C# e all'operatore OR in Visual Basic.

    2. Usare il nome del metodo che si desidera richiamare quando queste notifiche si verificano nel parametro clientDelegate.

    3. Impostare il metodo di callback add uguale a un oggetto DataCacheNotificationDescriptor che è possibile usare altrove nel programma per rimuovere il callback di notifica della cache.

Esempio

Il primo passaggio da effettuare nella registrazione per le notifiche cache consiste nel creare un metodo che deve essere chiamato dalla notifica. Il metodo chiamato dalla notifica deve accettare gli stessi parametri del delegato DataCacheNotificationCallback. Questo esempio illustra un metodo che può essere chiamato da una notifica cache.

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

Il secondo passaggio prevede l'aggiunta di un callback per una o più operazioni cache. Questo esempio crea una notifica per chiamare il metodo dell'esempio precedente. Unicamente a scopo dimostrativo, questa notifica è stata configurata per tutte le possibili operazioni cache con un ambito di notifica a livello di cache.

Per definire varie operazioni cache, è possibile ricorrere all'operatore binario OR per assegnare più di un'enumerazione DataCacheOperations a una variabile DataCacheOperations da usare per il parametro filtro. Per aggiungere un callback per le operazioni cache con ambito di notifica a livello di cache, usare il metodo AddCacheLevelCallback.

Nota

È opportuno evitare di effettuare questa operazione in un'applicazione di produzione. Questo esempio è fornito unicamente a scopo dimostrativo.

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

Il seguente esempio descrive l'aggiunta di un callback per un'operazione cache con ambito di notifica a livello di area, che si attiva solo quando alla cache viene aggiunta un'area chiamata 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);

Il seguente esempio descrive l'aggiunta di un callback per operazioni cache con ambito di notifica a livello di elemento, che si attiva solo quando nella cache si aggiunge o si sostituisce un elemento usando la chiave TestKey.

Nota

Solo le operazioni sugli elementi AddItem, ReplaceItem e RemoveItem possono attivare notifiche della cache con callback a livello di elemento. Se nel parametro filtro si specificano operazioni dell'area, l'aggiunta di un callback a livello di elemento provoca un'eccezione.

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

Per eliminare un callback della notifica cache

  1. Utilizzare il metodo RemoveCallback per rimuovere il callback di notifica della cache. Utilizzare l'oggetto DataCacheNotificationDescriptor appropriato per il parametro nd. Per interrompere la ricezione di notifiche, usare l'oggetto NotificationDescriptor ricevuto al momento della registrazione per le notifiche.

Esempio

In questo esempio, il client della cache e tre oggetti DataCacheNotificationDescriptor vengono dichiarati a livello di classe in modo che possano essere accessibili dai metodi che aggiungono e rimuovono i callback

'define variables for class
Dim myTestCache As DataCache
Dim ndCacheLvlAllOps As DataCacheNotificationDescriptor
Dim ndRegionLvlAllOps As DataCacheNotificationDescriptor
Dim ndItemLvlAllOps As DataCacheNotificationDescriptor
//define variables for class
DataCache myTestCache;
DataCacheNotificationDescriptor ndCacheLvlAllOps;
DataCacheNotificationDescriptor ndRegionLvlAllOps;
DataCacheNotificationDescriptor ndItemLvlAllOps;

In questo esempio viene illustrato un metodo che usa il metodo RemoveCallback per rimuovere i callback corrispondenti a tutti e tre gli oggetti DataCacheNotificationDescriptor dell'esempio precedente.

'remove cache notification callbacks
Public Sub RemoveNotificationCallbacks()
    myTestCache.RemoveCallback(ndCacheLvlAllOps)
    myTestCache.RemoveCallback(ndRegionLvlAllOps)
    myTestCache.RemoveCallback(ndItemLvlAllOps)
End Sub
//remove cache notification callbacks
public void RemoveNotificationCallbacks()
{
    myTestCache.RemoveCallback(ndCacheLvlAllOps);
    myTestCache.RemoveCallback(ndRegionLvlAllOps);
    myTestCache.RemoveCallback(ndItemLvlAllOps);
}