Erweitern der Klasse "DataCacheStoreProvider" (AppFabric 1.1-Cache)
In diesem Thema wird beschrieben, wie ein Read-Through-Anbieter bzw. ein Anbieter für verzögerte Schreibvorgänge für Windows Server AppFabric-Cache erstellt wird. Sie erstellen einen Anbieter, indem Sie die abstrakte Basisklasse DataCacheStoreProvider implementieren.
Erstellen des Anbieterprojekts
Erstellen Sie in Visual Studio 2010 ein neues Klassenbibliothekprojekt.
Fügen Sie einen Verweis auf die Assembly Microsoft.ApplicationServer.Core.dll hinzu. Standardmäßig befindet sich diese Assembly im Ordner .\Programme\Windows Server AppFabric.
Öffnen Sie die Quelldatei für dieses Projekt (Class1.cs oder Class1.vb abhängig von der Projektsprache).
Fügen Sie dem Namespace Microsoft.ApplicationServer.Caching am Anfang der Quelldatei eine Anweisung using (Imports in Visual Basic) hinzu.
using Microsoft.ApplicationServer.Caching;
Imports Microsoft.ApplicationServer.Caching
Ändern Sie die Klasse so, dass sie von DataCacheStoreProvider erbt. Beachten Sie, dass der Code-Editor von Visual Studio 2010 eine Funktion zum automatischen Erstellen leerer Funktionen aus dieser Klasse zur Verfügung stellt. Klicken Sie in Visual C# mit der rechten Maustaste auf die Klasse DataCacheStoreProvider, und wählen Sie dann Abstrakte Klasse implementieren aus. Drücken Sie in Visual Basic nach der Zeile Inherits die EINGABETASTE.
namespace RTProvider { public class Provider : DataCacheStoreProvider
Public Class Provider Inherits DataCacheStoreProvider
Signieren Sie die Assembly, um sie im globalen Assemblycache mit einem starken Namen zu installieren. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie dann Eigenschaften aus. Aktivieren Sie im Abschnitt Signierung der Projekteigenschaften das Kontrollkästchen Assembly signieren. Wählen Sie in der Dropdownliste Schlüsseldatei mit starkem Namen auswählen eine vorhandene Schlüsseldatei aus, oder wählen Sie <Neu...> aus, um eine neue Datei zu erstellen.
Hinzufügen eines öffentlichen Konstruktors
Jeder Anbieter sollte einen öffentlichen Konstruktor mit der folgenden Signatur implementieren:
public ProviderClass(string cacheName, Dictionary<string,string> config)
Ersetzen Sie ProviderClass
im Beispiel oben durch den Namen Ihrer Klasse, die die Methoden von DataCacheStoreProvider implementiert. Dieser Konstruktor wird bei der erstmaligen Aktivierung von Read-Through oder verzögerten Schreibvorgängen für einen ausgeführten Cachehost durch den Cache aufgerufen. Er wird außerdem bei jedem Neustart des Cachehosts aufgerufen. Der Konstruktor nimmt die folgenden beiden Parameter an:
Parameter | Beschreibung |
---|---|
cacheName |
Dieser Parameter vom Typ string ist der Name des Caches, der diesem Anbieter zugeordnet wird. Dieser Name kann für die zukünftige Verwendung gespeichert werden. Es ist z. B. erforderlich, den Cachenamen zu kennen, wenn neue DataCacheItem-Objekte als Antwort auf Leseanforderungen erstellt werden. |
config |
Dieses Dictionary<string,string>-Objekt enthält Konfigurationseinstellungen für den Anbieter. Diese Einstellungen sind für den Anbieter und seine Konfigurationsanforderungen zur Laufzeit benutzerdefiniert. Sie werden mithilfe des Parameters ProviderSettings des Windows PowerShell-Befehls New-Cache oder Set-CacheConfig übergeben. |
Implementieren der Anbietermethoden
Die Methoden der Klasse DataCacheStoreProvider müssen durch den Anbieter implementiert werden. Beachten Sie, dass die "Schreibmethoden" nicht implementiert werden müssen, wenn Sie nur einen Read-Through-Anbieter erstellen. Analog müssen die "Lesemethoden" nicht implementiert werden, wenn Sie nur einen Anbieter für verzögerte Schreibvorgänge erstellen.
Die Methodennamen beschreiben im Allgemeinen ihren Zweck. In der folgenden Tabelle werden die Methoden ohne die Überladungen beschrieben.
Methode | Beschreibung |
---|---|
Read |
Wird aufgerufen, wenn ein Cacheclient ein zwischengespeichertes Element anfordert, das aktuell im zugehörigen Cache nicht vorhanden ist. |
Write |
Wird für Elemente aufgerufen, die Cacheclients vor kurzer Zeit im Cache hinzugefügt oder geändert haben. |
Delete |
Wird aufgerufen, wenn ein Cacheclient ein Element aus dem zugehörigen Cache entfernt. |
Dispose |
Entfernt den Anbieter. |
Es gibt zwei Lesemethoden. Der ersten Methode Read wird ein Parameter DataCacheItemKey übergeben, der das einzelne Element identifiziert, das zurückgegeben werden soll. Der anderen überladenen Methode Read wird eine Auflistung von DataCacheItemKey-Objekten, die abgerufen und zurückgegeben werden sollen, in einem Dictionary aus DataCacheItemKey- und DataCacheItem-Objekten übergeben. Dieses Wörterbuchobjekt ist anfangs leer, und gelesene Elemente müssen hinzugefügt werden, bevor die Rückgabe von der Methode Read erfolgt. Beachten Sie, dass Sie die Klasse DataCacheItemFactory zum Erstellen der angeforderten Elemente – wie im folgenden Beispiel gezeigt – verwenden.
DataCacheItem dataCacheItem = DataCacheItemFactory.GetCacheItem(key, CACHE_NAME, objectValue, null);
Im Beispiel oben sollte die Zeichenfolge CACHE_NAME
auf den Namen des Caches festgelegt werden, der zuvor an den überladenen Konstruktor übergeben wurde. Das Element key
ist der angeforderte DataCacheItemKey. objectValue
ist das Objekt, das an die Clients für diesen Cacheschlüssel zurückgegeben werden sollte.
Anlog stehen zwei Schreibmethoden zur Verfügung. Der ersten Methode Write wird ein DataCacheItem-Objekt übergeben. Beachten Sie, dass die Eigenschaft Key dieses Objekts den zugehörigen DataCacheItemKey und die Eigenschaft Value den Wert enthält. Der anderen Methode Write wird ein Dictionary aus DataCacheItemKey- und DataCacheItem-Objekten übergeben.
Wichtig
Es ist wichtig, die Elemente aus dem Dictionary<DataCacheItemKey, DataCacheItem>-Objekt zu entfernen, wenn diese in den Back-End-Speicher geschrieben werden. Wenn die Elemente nicht entfernt werden, nimmt der Cache einen Schreibfehler an und wiederholt den Vorgang später.
Fehlerbehandlung
Wenn Fehler auftreten, kann ein DataCacheStoreException-Ausnahmeobjekt ausgelöst werden. Das Ergebnis dieser Ausnahme ist abhängig davon, ob die Ausnahme beim Ausführen der Methoden Read oder Write auftritt, unterschiedlich. In der folgenden Tabelle werden diese Unterschiede beschrieben.
Methode | Ergebnis der ausgelösten Ausnahme |
---|---|
Read |
Der Cacheclient, der den Lesevorgang ausführt, empfängt eine DataCacheException-Ausnahme, bei der die Eigenschaft ErrorCode dem Wert DataCacheErrorCode.ReadThroughProviderFailure entspricht (der Text der Ausnahme enthält den Code "<ERRCA0025>"). |
Write |
Der Schreibvorgang wird als fehlerhaft angesehen und basierend auf der Richtlinie für Wiederholungsversuche des Caches für verzögerte Schreibvorgänge wiederholt. Der Cacheclient erhält keine Informationen zu diesem Fehler. |
Ein Cacheclient kann drei mögliche DataCacheErrorCode-Werte während DataCache.Get-Aufrufen empfangen, die auf den Read-Through-Anbieter zugreifen.
DataCacheErrorCode.ReadThroughProviderFailure
DataCacheErrorCode.ReadThroughProviderDidNotReturnResult
DataCacheErrorCode.ReadThroughProviderNotFound
Beachten Sie außerdem, dass der Zeitraum, der für die Methoden Read des Anbieters anfällt, zur Gesamtanforderungszeit für die Methode DataCache.Get addiert wird. Aus diesem Grund müssen Sie ggf. den Anforderungstimeout erhöhen, um Verzögerungen zu berücksichtigen, die durch den Anbieter entstehen. Weitere Informationen finden Sie unter Konfigurieren von Cacheclienttimeouts (Windows Server AppFabric-Cache).
Testen und Debuggen des Anbieters
Für Entwicklungs- und Testzwecke ist es ggf. ratsam, einen Cachecluster mit einem Knoten auf dem Entwicklungscomputer einzurichten. Auf diese Weise können Sie die Assembly schnell erstellen, dem lokalen globalen Assemblycache (GAC) erneut hinzufügen und den lokalen Cachecluster dann neu starten. Die folgenden Schritte zeigen das Debuggen des Anbieters.
Öffnen Sie das Anbieterprojekt in Visual Studio 2010.
Klicken Sie im Menü Debuggen auf An den Prozess anhängen.
Aktivieren Sie Prozesse aller Benutzer anzeigen und Prozesse in allen Sitzungen anzeigen.
Wählen Sie den Prozess DistributedCacheService.exe aus.
Klicken Sie auf die Schaltfläche Anfügen.
Legen Sie Haltepunkte für Ihren Anbietercode fest, und führen Sie dann Vorgänge für den Cache aus einer anderen Anwendung aus, die zum Aufrufen der Anbietermethoden führen.
Warnung
Wenn Sie die Debugsitzung beenden, ohne den Debugger zu trennen, wird der Cachedienst auf dem Computer beendet. Das Ergebnis ist der Verlust aller zwischengespeicherten Daten auf diesem Computer.
Siehe auch
Konzepte
Bereitstellen eines Read-Through-Anbieters bzw. einen Anbieters für verzögerte Schreibvorgänge (AppFabric 1.1-Cache)
Aktivieren von Read-Through und verzögerten Schreibvorgängen für einen Cache (AppFabric 1.1-Cache)
2012-03-05