Compartilhar via


Como: habilitar persistência SQL para fluxos de trabalho e serviços de fluxo de trabalho

Este tópico descreve como configurar o recurso de Store de instância de fluxo de trabalho SQL para ativar persistência para os fluxos de trabalho e fluxo de trabalho serviços de aplicativos por meio e usando um arquivo de configuração.

A tela de aplicativo Windows Server simplifica o processo de configurar a persistência. Para obter mais informações, consulte Configuração de Persistência do App Fabric.

Antes de usar o recurso de Store de instância de fluxo de trabalho SQL, crie um base de dados que o recurso usa para manter instâncias de fluxo de trabalho. O programa de instalação do .NET Framework 4.6.1 copia os arquivos de script SQL associados ao recurso de Repositório de Instâncias de Fluxo de Trabalho do SQL para a pasta %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Executar esses arquivos de script em um base de dados SQL Server 2005 ou SQL Server 2008 que você deseja a instância Store de fluxo de trabalho SQL para usar para persistir instâncias de fluxo de trabalho. Execute o arquivo de SqlWorkflowInstanceStoreSchema.sql primeiro e execute o arquivo de SqlWorkflowInstanceStoreLogic.sql.

Observação

Para limpar o base de dados de persistência para ter um base de dados atualizado, executar os scripts em %WINDIR% \ Microsoft.NET \ Framework \ \ \ v4.xxx SQL EN na seguinte ordem.

  1. SqlWorkflowInstanceStoreSchema.sql
  2. SqlWorkflowInstanceStoreLogic.sql

Importante

Se você não criar um base de dados de persistência, o recurso de Store de instância de fluxo de trabalho do SQL gerencie uma exceção similar à seguinte quando um host tenta manter fluxos de trabalho.

System.Data.SqlClient.SqlException: Não foi possível encontrar o procedimento armazenado “System.Activities.DurableInstancing.CreateLockOwner”

As seguintes seções descrevem como ativar persistência para fluxos de trabalho e serviços de fluxo de trabalho usando a instância Store de fluxo de trabalho SQL. Para obter mais informações sobre as propriedades do Repositório de Instâncias de Fluxo de Trabalho do SQL, consulte Propriedades do Repositório de Instâncias de Fluxo de Trabalho do SQL.

Ativando a persistência para fluxos de trabalho são hospedados que usam WorkflowApplication

Você pode ativar persistência para fluxos de trabalho são hospedados que usam WorkflowApplication programaticamente usando o modelo de objeto de SqlWorkflowInstanceStore . O procedimento a seguir contém as etapas para fazer isso.

Para ativar persistência para fluxos de trabalho são hospedados

  1. Adicione uma referência a System.Activites.DurableInstancing.dll.

  2. Adicione a seguinte declaração na parte superior do arquivo de origem após a existência declarações “using”.

    using System.Activities.DurableInstancing;
    
  3. Construir SqlWorkflowInstanceStore e o atribui a InstanceStore de WorkflowApplication conforme mostrado no exemplo de código.

    SqlWorkflowInstanceStore store =
        new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI");
    
    WorkflowApplication wfApp =
        new WorkflowApplication(new Workflow1());
    
    wfApp.InstanceStore = store;
    

    Observação

    Dependendo de sua edição do SQL Server, o nome do servidor da cadeia de conexão pode ser diferente.

  4. Chamar o método de Persist no objeto de WorkflowApplication para manter um fluxo de trabalho, ou o método de Unload para persistir e descarregar um fluxo de trabalho. Você também pode manipular o evento de PersistableIdle gerado pelo objeto de WorkflowApplication e retornarPersist (ou Unload) o membro apropriado de PersistableIdleAction.

    wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
    {
        return PersistableIdleAction.Persist;
    };
    

Observação

Consulte a etapa Como criar e executar um fluxo de trabalho de execução prolongada do Tutorial de Introdução para obter instruções passo a passo.

Ativando a persistência para os serviços são hospedados de fluxo de trabalho que usam o WorkflowServiceHost

Você pode ativar persistência para os serviços são hospedados de fluxo de trabalho que usam WorkflowServiceHost programaticamente usando a classe de SqlWorkflowInstanceStoreBehavior ou da classe DurableInstancingOptions .

Usando a classe de SqlWorkflowInstanceStoreBehavior

O procedimento a seguir contém as etapas para usar a classe de SqlWorkflowInstanceStoreBehavior para ativar persistência para serviços são hospedados de fluxo de trabalho.

Para ativar persistência usando SqlWorkflowInstanceStoreBehavior

  1. Adicione uma referência ao System.ServiceModel.dll.

  2. Adicione a seguinte declaração na parte superior do arquivo de origem após a existência declarações “using”.

    using System.ServiceModel.Activities.Description;
    
  3. Crie uma instância de WorkflowServiceHost e adicionar pontos de extremidade para o serviço de fluxo de trabalho.

    WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress));
    host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
    
  4. Criar um objeto de SqlWorkflowInstanceStoreBehavior e para definir propriedades do objeto de comportamento.

    SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior(connectionString);
    instanceStoreBehavior.HostLockRenewalPeriod = new TimeSpan(0, 0, 5);
    instanceStoreBehavior.InstanceCompletionAction = InstanceCompletionAction.DeleteAll;
    instanceStoreBehavior.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry;
    instanceStoreBehavior.InstanceEncodingOption = InstanceEncodingOption.GZip;
    instanceStoreBehavior.RunnableInstancesDetectionPeriod = new TimeSpan("00:00:02");
    host.Description.Behaviors.Add(instanceStoreBehavior);
    
  5. Abra o host serviço de fluxo de trabalho.

    host.Open();
    

Usando a propriedade de DurableInstancingOptions

Quando SqlWorkflowInstanceStoreBehavior é aplicado, DurableInstancingOptions.InstanceStore em WorkflowServiceHost está definido para o objeto de SqlWorkflowInstanceStore criado usando os valores de configuração. Você pode fazer o mesmo para definir programaticamente a propriedade de DurableInstancingOptions de WorkflowServiceHost sem usar a classe de SqlWorkflowInstanceStoreBehavior conforme mostrado no exemplo de código.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Ativando a persistência para os serviços Estar- hospedados de fluxo de trabalho que usam o WorkflowServiceHost usando um arquivo de configuração

Você pode ativar persistência para serviços são hospedados hospedado ou do Windows do processo de ativação de serviço (-) WAS de fluxo de trabalho usando um arquivo de configuração. Um serviço Estar- hospedado de fluxo de trabalho usa o WorkflowServiceHost como serviços são hospedados de fluxo de trabalho fazem.

O SqlWorkflowInstanceStoreBehavior, um comportamento de serviço que permite que você altere convenientemente as propriedades do Repositório de Instâncias de Fluxo de Trabalho do SQL por meio da configuração XML. Para serviços Estar- hospedados de fluxo de trabalho, use o arquivo web.config. O seguinte exemplo de configuração mostra como configurar a instância Store de fluxo de trabalho do SQL usando o elemento do comportamento de sqlWorkflowInstanceStore em um arquivo de configuração.

<serviceBehaviors>
    <behavior name="">
        <sqlWorkflowInstanceStore
                    connectionString="Data Source=(local);Initial Catalog=DefaultPersistenceProviderDb;Integrated Security=True;Async=true"
                    instanceEncodingOption="GZip | None"
                    instanceCompletionAction="DeleteAll | DeleteNothing"
                    instanceLockedExceptionAction="NoRetry | BasicRetry |AggressiveRetry"
                    hostLockRenewalPeriod="00:00:30"
                    runnableInstancesDetectionPeriod="00:00:05" />

    </behavior>
</serviceBehaviors>

Se você não definir valores para connectionString ou propriedade de connectionStringName , a instância Store de fluxo de trabalho do SQL usa a cadeia de conexão chamado padrão DefaultSqlWorkflowInstanceStoreConnectionString.

Quando SqlWorkflowInstanceStoreBehavior é aplicado, DurableInstancingOptions.InstanceStore em WorkflowServiceHost está definido para o objeto de SqlWorkflowInstanceStore criado usando os valores de configuração. Você pode fazer o mesmo programaticamente para usar SqlWorkflowInstanceStore com WorkflowServiceHost sem usar o elemento do comportamento de serviço.

workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;

Importante

É recomendável que você não armazene informações sigilosas como nomes de usuário e senhas no arquivo web.config. Se você armazenar informações confidenciais no arquivo web.config, você deve proteger o acesso ao arquivo web.config usando listas de controle de acesso (ACLs) do sistema de arquivos. Além disso, você também pode proteger os valores de configuração em um arquivo de configuração como mencionado em Criptografando informações de configuração usando configuração protegida.

A instalação do .NET Framework 4.6.1 adicione os seguintes elementos relacionados ao recurso de Repositório de Instâncias de Fluxo de Trabalho do SQL ao arquivo Machine.config:

  • Adicione o seguinte elemento de extensão do comportamento ao arquivo Machine.config para que você possa usar o elemento de comportamento do serviço <sqlWorkflowInstanceStore> no arquivo de configuração para configurar a persistência para os serviços.

    <configuration>
        <system.serviceModel>
            <extensions>
                <behaviorExtensions>
                    <add name="sqlWorkflowInstanceStore" type="System.Activities.DurableInstancing.SqlWorkflowInstanceStoreElement, System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
                </behaviorExtensions>
            </extensions>
        </system.serviceModel>
    </configuration>