Procedura: Ricevere notifiche da una cache nel ruolo di Azure

Aggiornamento: agosto 2015

ImportantImportante
Microsoft consiglia di usare Cache Redis di Azure per tutte le nuove attività di sviluppo. Per la documentazione corrente e per istruzioni sulla scelta di un'offerta di Cache di Azure, vedere Qual è l'offerta di Cache di Azure più adatta alle mie esigenze?

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 chiamato insieme alle notifiche cache deve accettare gli stessi parametri del delegato DataCacheNotificationCallback. Il secondo passaggio prevede l'aggiunta di un callback usando uno dei tre metodi resi 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.

  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. Usare uno dei tre metodi resi disponibili dall'oggetto DataCache per definire l'ambito della notifica: AddCacheLevelCallback, AddRegionLevelCallback o AddItemLevelCallback.

    1. Usare l'enumerazione DataCacheOperations del parametro filter per specificare il tipo di operazioni cache che devono attivare le notifiche. 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 lo stesso metodo di aggiunta del callback dell'oggetto DataCacheNotificationDescriptor che può essere usato in altre parti del programma per eliminare il callback della notifica cache.

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 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.

noteNota
È 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
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
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.

noteNota
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
DataCacheNotificationDescriptor ndItemUpdateOps
    = myTestCache.AddItemLevelCallback("TestKey",
        (DataCacheOperations.AddItem | DataCacheOperations.ReplaceItem),
        myItemLvlUpdateDelegate);

  1. Per eliminare il callback della notifica cache, usare il metodo RemoveCallback. Usare 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.

In questo esempio il client della cache e tre oggetti DataCacheNotificationDescriptor vengono dichiarati a un livello di classe che li rende accessibili da parte dei metodi che aggiungono ed eliminano i callback.


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

Questo esempio riporta un metodo che usa il metodo RemoveCallback per eliminare i callback corrispondenti a tutti e tre gli oggetti DataCacheNotificationDescriptor dell'esempio precedente.


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

Mostra: