Estendere la classe DataCacheStoreProvider (Memorizzazione nella cache di AppFabric 1.1)

In questo argomento viene descritto come creare un provider read-through/write-behind per memorizzazione nella cache di Windows Server AppFabric. La creazione di un provider consiste nell'implementazione della classe di base astratta DataCacheStoreProvider.

Creare il progetto di provider

  1. In Visual Studio 2010 creare un nuovo progetto Libreria di classi.

  2. Aggiungere un riferimento all'assembly Microsoft.ApplicationServer.Core.dll. Per impostazione predefinita, l'assembly si trova in .\Programmi\Windows Server AppFabric.

  3. Aprire il file di origine del progetto, ossia Class1.cs o Class1.vb a seconda del linguaggio utilizzato.

  4. In cima al file di origine aggiungere un'istruzione using (Imports in Visual Basic) allo spazio dei nomi Microsoft.ApplicationServer.Caching.

    using Microsoft.ApplicationServer.Caching;
    
    Imports Microsoft.ApplicationServer.Caching
    
  5. Modificare la classe in modo da consentire l'ereditarietà da DataCacheStoreProvider. Nell'editor del codice di Visual Studio 2010 è disponibile una funzionalità per la creazione automatica di funzioni vuote da questa classe. In Visual C# fare clic con il pulsante destro del mouse sulla classe DataCacheStoreProvider, quindi scegliere Implementa classe astratta. In Visual Basic premere INVIO dopo la riga Inherits.

    namespace RTProvider
    {
        public class Provider : DataCacheStoreProvider
    
    Public Class Provider
        Inherits DataCacheStoreProvider
    
  6. Firmare l'assembly per installarlo nella Global Assembly Cache con un nome sicuro. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Proprietà. Nella sezione Firma delle proprietà del progetto selezionare la casella di controllo Firma assembly. Nell'elenco a discesa Scegli un file chiave con nome sicuro selezionare un file di chiave esistente oppure scegliere l'opzione <Nuovo...> per creare un nuovo file.

Aggiungere un costruttore pubblico

Ciascun provider deve implementare un costruttore pubblico con la seguente firma:

public ProviderClass(string cacheName, Dictionary<string,string> config)

Sostituire ProviderClass nell'esempio sopra riportato con il nome della classe che implementa i metodi di DataCacheStoreProvider. Questo costruttore viene chiamato la prima volta che una cache abilita la funzionalità read-through o write-behind su un host della cache in esecuzione. Viene chiamato anche ad ogni riavvio dell'host. Il costruttore accetta i due parametri seguenti:

Parametro Descrizione

cacheName

Parametro di tipo string corrispondente al nome della cache che viene associata al provider. Tale nome può essere memorizzato per utilizzi successivi. È ad esempio necessario conoscere il nome della cache per la creazione di nuovi oggetti DataCacheItem in risposta a richieste di lettura.

config

Oggetto Dictionary<string,string> contenente le impostazioni di configurazione del provider. Tali impostazioni vengono personalizzate per il provider e i relativi requisiti di configurazione in fase di runtime. Vengono passate mediante il parametro ProviderSettings del comando di Windows PowerShell New-Cache o Set-CacheConfig.

Implementare i metodi del provider

I metodi della classe DataCacheStoreProvider devono essere implementati dal provider. Se si crea un provider solo di tipo read-through, non è necessario implementare i metodi "Write". In modo analogo, se si crea un provider solo di tipo write-behind, non è necessario implementare i metodi "Read".

I nomi dei metodi sono in genere descrittivi del relativo scopo. Nella tabella seguente vengono descritti i metodi ad esclusione degli overload.

Metodo Descrizione

Read

Viene chiamato quando un client della cache richiede un elemento attualmente non presente nella cache associata.

Write

Viene chiamato per gli elementi che i client della cache hanno da poco aggiunto o modificato nella cache.

Delete

Viene chiamato quando un client della cache rimuove un elemento dalla cache associata.

Dispose

Elimina il provider.

Esistono due metodi per la lettura. Al primo metodo Read viene passato un parametro DataCacheItemKey che identifica il singolo elemento da restituire, mentre all'altro overload Read viene passata una raccolta di oggetti DataCacheItemKey da recuperare e restituire a un oggetto Dictionary di oggetti DataCacheItemKey e DataCacheItem. All'inizio l'oggetto Dictionary è vuoto ed è necessario aggiungere elementi di lettura prima della restituzione dal metodo Read. Per creare gli elementi richiesti, è necessario utilizzare la classe DataCacheItemFactory come illustrato nell'esempio riportato di seguito.

DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);

Nell'esempio sopra riportato, la stringa CACHE_NAME deve essere impostata sul nome della cache precedentemente passata al costruttore di overload. key corrisponde all'oggetto DataCacheItemKey richiesto, mentre objectValue è l'oggetto da restituire ai client per la chiave della cache.

In modo analogo, esistono due metodi per la scrittura. Al primo metodo Write viene passato un oggetto DataCacheItem. La proprietà Key di questo oggetto contiene il parametro DataCacheItemKey associato, mentre la proprietà Value contiene il valore. All'altro metodo Write viene passato un oggetto Dictionary di oggetti DataCacheItemKey e DataCacheItem.

Importante

È importante rimuovere gli elementi dall'oggetto Dictionary<DataCacheItemKey, DataCacheItem> durante la scrittura nell'archivio back-end. Se tali elementi non vengono rimossi, l'operazione di scrittura viene considerata errata e rieseguita in un secondo momento.

Gestione degli errori

In caso di errori, è possibile generare un oggetto eccezione DataCacheStoreException. Il risultato può variare a seconda che tale eccezione si verifichi durante l'esecuzione del metodo Read o Write. Nella tabella seguente vengono descritte le differenze.

Metodo Risultato dell'eccezione generata

Read

Il client della cache che esegue la lettura riceve un'eccezione DataCacheException con la proprietà ErrorCode uguale a DataCacheErrorCode.ReadThroughProviderFailure (nel testo dell'eccezione è incluso il codice "<ERRCA0025>").

Write

Si presuppone che la scrittura non sia riuscita. Verrà effettuato un nuovo tentativo di scrittura in base agli specifici criteri della cache per le operazioni write-behind. Il client della cache non riceve alcuna notifica dell'errore.

Durante le chiamate DataCache.Get per l'accesso al provider read-through, un client della cache può ricevere tre diversi valori di DataCacheErrorCode:

  1. DataCacheErrorCode.ReadThroughProviderFailure

  2. DataCacheErrorCode.ReadThroughProviderDidNotReturnResult

  3. DataCacheErrorCode.ReadThroughProviderNotFound

È inoltre necessario tener presente che il tempo impiegato per i metodi Read del provider deve essere aggiunto al tempo totale delle richieste per il metodo DataCache.Get. Per questo motivo, può essere necessario incrementare il timeout delle richieste per tener conto degli eventuali ritardi introdotti dal provider. Per ulteriori informazioni, vedere Configurazione dei timeout del client cache (Memorizzazione nella cache di Windows Server AppFabric).

Test e debug del provider

Per le attività di sviluppo e test può essere opportuno configurare nel computer di sviluppo un cluster di cache a nodo singolo. In tal modo è possibile eseguire la ricompilazione in modo rapido, riaggiungere l'assembly alla Global Assembly Cache locale e riavviare il cluster di cache locale. Nella procedura riportata di seguito viene illustrato come eseguire il debug del provider.

  1. Aprire il progetto di provider in Visual Studio 2010.

  2. Scegliere Connetti a processo dal menu Debug.

  3. Selezionare le opzioni Mostra i processi di tutti gli utenti e Mostra processi in tutte le sessioni.

  4. Selezionare il processo DistributedCacheService.exe.

  5. Fare clic sul pulsante Connetti.

  6. Definire i punti di interruzione nel codice del provider ed eseguire le operazioni sulla cache da un'altra applicazione per determinare la chiamata dei metodi del provider.

Avviso

L'arresto della sessione di debug senza la disconnessione del debugger determinerà l'arresto del Servizio di memorizzazione nella cache sul computer. Tutti i dati memorizzati nella cache del computer andranno persi.

Vedere anche

Concetti

Distribuire un provider read-through/write-behind (Memorizzazione nella cache di AppFabric 1.1)
Abilitare le funzionalità read-through e write-behind su una cache (Memorizzazione nella cache di AppFabric 1.1)

  2012-03-05