Como: desenvolver provedores de repositório de instância
O procedimento a seguir tem etapas para criar um provedor personalizado de repositório de instâncias. Para obter informações gerais sobre os provedores de repositório de instâncias, consulta e controle, consulte Repositório de instância, Consulta e Provedores de controle.
Crie um projeto da biblioteca de classes.
Adicione referência a Microsoft.ApplicationServer.StoreProvider.dll, System.Activities.DurableInstancing.dll e System.Runtime.DurableInstancing.dll. Além disso, adicione referências a System.Configuration.dll e System.Data.dll para compilar o código de amostra fornecido neste tópico.
Adicione as seguintes instruções using no início do arquivo de origem.
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;
Crie uma classe para o provedor de repositório de instâncias derivado da classe InstanceStoreProvider.
public sealed class MySqlWorkflowInstanceStoreProvider : InstanceStoreProvider { }
Implemente o método Initialize. Esse método aceita um recipiente de propriedades que corresponde às informações de configuração especificadas no arquivo de configuração. Os dados neste recipiente de propriedades são usados para construir o provedor.
O método Initialize é chamado antes do método CreateInstanceStore ou UniqueProviderIdentifier ser chamado.
string ConnectionString { get; set; } public override void Initialize(string name, NameValueCollection config) { this.ConnectionString= config["connectionString"]; // Initialize the base class base.Initialize(name, config); }
Implemente o método CreateInstanceStore da classe InstanceStoreProvider para retornar um objeto System.Runtime.DurableInstancing.InstanceStore, que o cliente usará para executar comandos no repositório de instâncias.
public override InstanceStore CreateInstanceStore() { // the following line creates an instance of the SqlWorkflowInstanceStore class SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(this.ConnectionString); return store; }
Implemente o método UniqueProviderIdentifier. A ID exclusiva do provedor que esse método retorna é usada para determinar se objetos diferentes do provedor são resolvidos no mesmo repositório subjacente.
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(); } } }
O Serviço de Gerenciamento de Fluxo de Trabalho (WMS) ou um host de fluxo de trabalho chama esse método no provedor do repositório de instâncias para obter um objeto InstanceStore específico ao repositório. AppFabric inclui um provedor do repositório de instâncias para o Repositório de Instâncias de Fluxo de Trabalho SQL, que cria um objeto SqlWorkflowInstanceStore quando o método CreateInstanceStore é chamado.
Importante
Consulte Como: registrar provedores personalizados, para obter informações sobre como registrar o provedor com o Windows Server AppFabric.
2011-12-05