So wird es gemacht: Entwickeln eines Instanzspeicheranbieters
Das folgende Verfahren beschreibt Schritte zum Erstellen eines benutzerdefinierten Instanzspeicheranbieters. Allgemeine Informationen zu Instanzspeicher-, Abfrage- und Steuerungsanbietern finden Sie unter Instanzspeicher-, Instanzabfrage- und Instanzsteuerungsanbieter.
Erstellen Sie ein Klassenbibliotheksprojekt.
Fügen Sie Verweise auf Microsoft.ApplicationServer.StoreProvider.dll, System.Activities.DurableInstancing.dll und System.Runtime.DurableInstancing.dll hinzu. Fügen Sie darüber hinaus Verweise auf System.Configuration.dll und System.Data.dll hinzu, um den in diesem Thema bereitgestellten Beispielcode zu kompilieren.
Fügen Sie die folgenden using-Anweisungen am Anfang der Quelldatei hinzu.
using Microsoft.ApplicationServer.StoreProvider; using System.Runtime.DurableInstancing; using System.Activities.DurableInstancing; //for the sample code provided in the methods using System.Collections.Specialized; using System.Data; using System.Data.SqlClient;
Erstellen Sie eine Klasse für den Instanzspeicheranbieter, die aus der Klasse InstanceStoreProvider abgeleitet ist.
public sealed class MySqlWorkflowInstanceStoreProvider : InstanceStoreProvider { }
Implementieren Sie die Initialize-Methode. Diese Methode akzeptiert einen Eigenschaftenbehälter, der den in der Konfigurationsdatei angegebenen Konfigurationsinformationen entspricht. Die in diesem Eigenschaftenbehälter vorhandenen Daten werden zur Konstruktion des Anbieters verwendet.
Die Methode Initialize wird vor den Methoden CreateInstanceStore und UniqueProviderIdentifier aufgerufen.
string ConnectionString { get; set; } public override void Initialize(string name, NameValueCollection config) { this.ConnectionString= config["connectionString"]; // Initialize the base class base.Initialize(name, config); }
Implementieren Sie die CreateInstanceStore-Methode der InstanceStoreProvider-Klasse, um ein System.Runtime.DurableInstancing.InstanceStore-Objekt zurückzugeben, das vom Client für das Ausführen von Befehlen auf dem Instanzspeicher verwendet wird.
public override InstanceStore CreateInstanceStore() { // the following line creates an instance of the SqlWorkflowInstanceStore class SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(this.ConnectionString); return store; }
Implementieren Sie die UniqueProviderIdentifier-Methode. Die eindeutige Anbieter-ID, die von dieser Methode zurückgegeben wird, wird zur Bestimmung verwendet, ob verschiedene Anbieterobjekte zum gleichen zugrundeliegenden Informationsspeicher aufgelöst werden.
string UniqueStoreIdentifier { get; set; } public override string UniqueProviderIdentifier() { this.UniqueStoreIdentifier = GetUniqueStoreIdentifier(this.ConnectionString); return this.UniqueStoreIdentifier; } private string GetUniqueStoreIdentifier(string connectionString) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand()) { command.CommandType = CommandType.Text; command.CommandText = "SELECT TOP (1) [StoreIdentifier] FROM [Microsoft.ApplicationServer.DurableInstancing].[StoreVersion]"; command.Connection = connection; command.Connection.Open(); Guid identifier = (Guid)command.ExecuteScalar(); return identifier.ToString(); } } }
Der Workflowverwaltungsdienst (Workflow Management Service, WMS) oder ein Workflowhost ruft diese Methode des Instanzspeicheranbieters auf, um ein speicherspezifisches InstanceStore-Objekt abzurufen. AppFabric schließt einen Instanzspeicheranbieter für den SQL-Workflowinstanzspeicher ein, der beim Aufrufen der Methode CreateInstanceStore ein SqlWorkflowInstanceStore-Objekt erstellt.
Wichtig
Siehe auch Vorgehensweise: Registrieren von benutzerdefinierten Anbietern, um Informationen zum Registrieren des Anbieters bei Windows Server AppFabric zu erhalten.
2011-12-05