Instanzspeicher-, Instanzabfrage- und Instanzsteuerungsanbieter

Ein Instanzspeicher ist ein logischer Container für Instanzen. Es ist der Speicherort, an dem Instanzdaten und Metadaten gespeichert werden. Ein Instanzspeicher impliziert keine dedizierten physischen Speicher. Ein Instanzspeicher kann dauerhafte Informationen in einer SQL Server-Datenbank oder nicht dauerhafte Statusinformationen in einem Arbeitsspeicherbereich enthalten. .NET Framework, Version 4 umfasst den SQL-Workflowinstanzspeicher, bei dem es sich um eine konkrete Implementierung eines Instanzspeichers handelt, der es ermöglicht, dass Workflows Instanzdaten und Metadaten im persistenten Zustand an eine SQL Server 2005- oder SQL Server 2008-Datenbank übergeben. Weitere Informationen finden Sie unter Instance Stores (https://go.microsoft.com/fwlink/?LinkId=181533) in der Hilfe zu .NET Framework. AppFabric unterstützt die Übergabe von Workflowdienstinstanzen im persistenten Zustand nur an SQL Server 2008-Datenbanken.

Wenn Sie einen Instanzspeicher in Verbindung mit den von AppFabric bereitgestellten Tools (Windows PowerShell-Cmdlets und IIS-Manager-Erweiterungen) und mit dem Workflowverwaltungsdienst verwenden möchten, müssen Sie einen Instanzspeicheranbieter, eine Instanzabfrageanbieter und einen Instanzsteuerungsanbieter für diesen Instanzspeicher entwickeln. In den folgenden Abschnitten werden diese drei Anbieterarten beschrieben.

Hinweis

Die API für Instanzabfrage und -steuerungsanbieter basiert auf .NET Framework 2.0, wohingegen die API für den Instanzspeicheranbieter auf .NET Framework, Version 4 basiert.

Instanzspeicheranbieter

Ein Instanzspeicheranbieter für einen Instanzspeicher stellt eine API bereit, die Clients aufrufen, um Instanzspeicherobjekte zu erstellen. Der Client verwendet das Instanzspeicherobjekt zum Speichern einer Workflowinstanz im zugrunde liegenden Instanzspeicher (z. B. eine SQL Server-Datenbank) oder zum Laden einer Instanz aus dem Instanzspeicher.

AppFabric enthält einen Instanzspeicheranbieter für den SQL-Workflowinstanzspeicher. Wenn ein anderer Instanzspeicher unterstützt werden soll, müssen Sie einen Instanzspeicheranbieter für diesen Instanzspeicher erstellen. Zum Erstellen eines Instanzspeicheranbieters müssen Sie eine Klasse erstellen, die von der InstanceStoreProvider-Klasse abgeleitet wird und Methoden implementiert, mit denen ein Instanzspeicher erstellt wird, wie SqlWorkflowInstanceStore. Weitere Informationen finden Sie unter So wird es gemacht: Entwickeln eines Instanzspeicheranbieters.

Instanzabfrageanbieter

Mit einem Instanzabfrageanbieter für einen Instanzspeicher können Sie Abfragen des Instanzspeichers ausführen. Wenn Sie ein Cmdlet wie Get-ASAppServiceInstance zum Abfragen von Instanzen in einem Instanzspeicher verwenden, erstellt das Cmdlet ein Abfrageanbieterobjekt und ruft Methoden für das Objekt auf. Das Abfrageanbieterobjekt erstellt Abfragen und führt Abfragen des Instanzspeichers aus und gibt die Abfrageergebnisse an das Cmdlet zurück. Die IIS-Manager-Erweiterungen von AppFabric verwenden in den meisten Szenarien Cmdlets, in denen es um Abfragen von Instanzspeichern geht. Daher sind sie also auch von Abfrageanbietern abhängig.

Alle Abfrageanbieter implementieren die gleiche API und stellen eine Abstraktionsschicht oberhalb der zugrunde liegenden unterschiedlichen Instanzspeicher bereit. AppFabric umfasst einen Instanzabfrageanbieter für den SQL-Workflowinstanzspeicher, mit dem Sie Instanzen abfragen können, die in der SQL Server-Persistenzdatenbank gespeichert sind. Wenn der SQL-Abfrageanbieter eine Abfrage von einem Client (wie einem Windows PowerShell-Cmdlet) erhält, fragt er Instanzdaten in der SQL Server-Datenbank ab, ruft diese ab und gibt den Ergebnissatz an den Client zurück. Die Implementierung des Instanzabfrageanbieters für den SQL-Workflowinstanzspeicher befindet sich in der Datei Microsoft.ApplicationServer.StoreManagement.dll.

Zur Unterstützung der Abfrage eines anderen Instanzspeichertyps benötigen Sie einen Instanzabfrageanbieter für diesen Speicher. Wenn Sie einen benutzerdefinierten Abfrageanbieter erstellen möchten, müssen Sie eine Klasse erstellen, die von der InstanceQueryProvider-Klasse abgeleitet ist, und Methoden implementieren, um Abfragen im Namen des Clients auszuführen. Weitere Informationen finden Sie unter So wird es gemacht: Entwickeln eines Instanzabfrageanbieters.

Instanzsteuerungsanbieter

Ein Instanzsteuerungsanbieter ermöglicht es einem Client, Steuerbefehle für Instanzen in einem Instanzspeicher auszuführen und Befehle abzurufen, die für eine Instanz ausgeführt werden müssen. Wenn Sie ein von AppFabric bereitgestelltes Windows PowerShell-Cmdlet zum Steuern (Anhalten, Fortsetzen usw.) einer Instanz im Instanzspeicher verwenden, erstellt das Cmdlet ein Steuerungsanbieterobjekt und ruft eine Methode für das Objekt auf, mit dem der Befehl einer Befehlswarteschlange hinzugefügt wird. Der Steuerungsanbieter verwaltet die im Instanzspeicher befindliche Befehlswarteschlange. Ein generischer Host wie der Workflowverwaltungsdienst (WMS) erstellt ein Steuerungsanbieterobjekt und ruft eine Methode hierfür auf, um den in der Befehlswarteschlange gespeicherten Befehl abzurufen. Anschließend führt er den Befehl aus. WMS benachrichtigt den Steuerungsanbieter im Hinblick auf den Fehlschlag oder den Erfolg der Ausführung. Wenn die Ausführung erfolgreich verlaufen ist, entfernt der Steuerungsanbieter den Befehl aus der Warteschlange; andernfalls benachrichtigt WMS den Steuerungsanbieter im Hinblick auf den Fehlschlag, und der Anbieter führt die geeignete Maßnahme durch.

Zusätzlich zur Weiterleitung eines Befehls aus der Befehlswarteschlange an WMS leitet der Instanzsteuerungsanbieter auch einen Eigenschaftsbehälter weiter, der Metadaten der Instanz enthält, für die der Befehl ausgegeben wurde. Dieser Eigenschaftsbehälter umfasst den Sitenamen und den virtuellen Dienstpfad der Instanz. Der Steuerungsanbieter ruft diese Metadaten aus dem Instanzspeicher ab. WMS verwendet diese Metadaten, um auf den Instanzsteuerungsendpunkt (Instance Control Endpoint, ICE) zuzugreifen, der von der Dienstinstanz bereitgestellt wird, und ruft die geeigneten Methoden für den Endpunkt auf.

Alle Abfrageanbieter implementieren die gleiche API und stellen eine Abstraktionsschicht oberhalb der zugrunde liegenden unterschiedlichen Instanzspeicher bereit. AppFabric umfasst einen Instanzsteuerungsanbieter für den SQL-Workflowinstanzspeicher, mit dem Sie Steuerungsbefehle für die Instanzen ausführen können, die in der SQL Server-Persistenzdatenbank gespeichert sind. Die Implementierung des Instanzsteuerungsanbieter für den SQL-Workflowinstanzspeicher befindet sich in der Datei Microsoft.ApplicationServer.StoreManagement.dll. Zur Unterstützung der Ausgabe von Befehlen für Instanzen, die in einem anderen Instanzspeichertyp gespeichert sind, müssen Sie einen Instanzsteuerungsanbieter für diesen Speicher entwickeln.

Wenn Sie einen benutzerdefinierten Steuerungsanbieter erstellen möchten, müssen Sie eine Klasse erstellen, die von der InstanceControlProvider-Klasse abgeleitet ist, und Methoden zum Hinzufügen und Abrufen von Befehlen zu/aus der Befehlswarteschlange im Namen von Clients implementieren. Weitere Informationen finden Sie unter So wird es gemacht: Entwickeln eines Instanzsteuerungsanbieters.

Instanzsteuerungsanbieter für den SQL-Workflowinstanzspeicher

AppFabric enthält einen Instanzsteuerungsanbieter für den SQL-Workflowinstanzspeicher. Der Instanzsteuerungsanbieter verwaltet die Befehlswarteschlange in eine SQL Server-Datenbank. Wenn Sie ein Steuerungs-Cmdlet für den SQL-Workflowinstanzspeicher ausführen, übernimmt der Instanzsteuerungsanbieter die Anforderung und speichert die Befehlsinformationen in der Befehlswarteschlange in der SQL Server-Datenbank. WMS verwendet den Instanzsteuerungsanbieter zum Abrufen des Befehls aus der Befehlswarteschlange, führt den Befehl für den SQL-Workflowinstanzspeicher aus und löscht den Befehl aus der Befehlswarteschlange, sofern er erfolgreich ausgeführt werden konnte. Die Implementierung des Instanzsteuerungsanbieters für den SQL-Workflowinstanzspeicher befindet sich in der Datei Microsoft.ApplicationServer.StoreManagement.dll.

Die folgenden Punkte gelten für den Instanzsteuerungsanbieter für den SQL-Workflowinstanzspeicher:

  • Der Befehl Löschen wird sofort (synchron) ausgeführt. Alle anderen Befehle werden in die Befehlswarteschlange gesetzt (hinzugefügt), bevor der Steuerungsanbieter die Befehle zwecks Verarbeitung an WMS übergibt.

  • Die Befehlswarteschlange ist eine FIFO-Warteschlange (First in, First out). Der Steuerungsanbieter fügt einen neuen Befehl am Ende der Warteschlange hinzu und liest den am Anfang befindlichen Befehl. Der Steuerungsanbieter kehrt zum ältesten Befehl zurück, der nicht für WMS gesperrt ist.

  • Der Steuerungsanbieter kann pro Instanz nur einen Befehl in der Warteschlange speichern. Wenn der Anbieter eine Anforderung zum Speichern eines Befehls für eine Instanz in der Warteschlange erhält, für die bereits ein Befehl vorhanden ist, überschreibt er den vorhandenen Befehl, wenn der Befehl nicht gesperrt ist. Wenn der Befehl gesperrt ist oder wenn sich der Befehl im Status "Ausstehend" befindet, gibt der Steuerungsanbieter einen Fehler zurück.

  • Der Steuerungsanbieter setzt eine temporäre Sperre, nachdem er einen Befehl in der Warteschlange gelesen hat. Diese Sperre läuft nach 65 Sekunden ab. Nachdem er seitens WMS benachrichtigt worden ist, dass der Befehl erfolgreich ausgeführt wurde, entfernt der Anbieter den Befehl aus der Befehlswarteschlange.

  • Der Steuerungsanbieter unternimmt fünf erneute Versuche, wenn die Ausführung eines Befehls fehlschlägt. Die Befehlswarteschlange unterhält einen Zähler für fehlgeschlagene Ausführungsversuche. Wenn die Ausführung des Befehls zum fünften Mal fehlschlägt, entfernt der Anbieter den Befehl aus der Befehlswarteschlange.

  • Der Steuerungsanbieter unterhält ein Fehlerprotokoll für die Befehlsausführung in der Datenbank. In diesem Protokoll sind Metadaten zu fehlgeschlagenen Befehlen sowie die Gründe für den Fehlschlag gespeichert. Das Protokoll enthält höchstens einen fehlgeschlagenen Befehl pro Instanz. Jeder Protokolleintrag enthält den Befehlstyp, die Instanz-ID, den Fehlercode, die Fehlermeldung, die Zeit des letzten Ausführungsversuchs, die ID des Computers, auf dem der Befehl ausgeführt werden sollte, und die Anzahl der Ausführungsversuche.

    Der Protokolleintrag für eine Instanz wird entfernt, wenn ein neuer Befehl für die Instanz in die Warteschlange gesetzt wird oder wenn ein Benutzer die Instanz aus dem Instanzspeicher entfernt. Ein Benutzer kann die Instanz mit einem Cmdlet (z. B. Remove-ASAppServiceInstance) entfernen.

  • Der Steuerungsanbieter nimmt Befehle in Stapeln zu je 10 aus der Warteschlange.

Siehe auch

Konzepte

So wird es gemacht: Entwickeln eines Instanzspeicheranbieters
So wird es gemacht: Entwickeln eines Instanzabfrageanbieters
So wird es gemacht: Entwickeln eines Instanzsteuerungsanbieters
So wird es gemacht: Konfigurieren von Instanzspeicher-, Instanzabfrage- und Instanzsteuerungsanbieter

  2011-12-05