Como habilitar a persistência SQL para fluxos de trabalho e serviços de fluxo de trabalho
Este artigo descreve como configurar o recurso Repositório de Instâncias de Fluxo de Trabalho SQL para habilitar a persistência para seus fluxos de trabalho e serviços de fluxo de trabalho programaticamente e usando um arquivo de configuração.
O Windows Server App Fabric simplifica o processo de configuração da persistência. Para obter mais informações, consulte Configuração de persistência do App Fabric.
Antes de usar o recurso Repositório de Instâncias de Fluxo de Trabalho SQL, crie um banco de dados que o recurso usa para persistir instâncias de fluxo de trabalho. O programa de instalação do .NET Framework 4.6.1 copia arquivos de script SQL associados ao recurso SQL Workflow Instance Store para a pasta %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Execute esses arquivos de script em um banco de dados SQL Server 2005 ou SQL Server 2008 que você deseja que o Repositório de Instâncias de Fluxo de Trabalho SQL use para persistir instâncias de fluxo de trabalho. Execute o arquivo SqlWorkflowInstanceStoreSchema.sql primeiro e, em seguida, execute o arquivo SqlWorkflowInstanceStoreLogic.sql.
Nota
Para limpar o banco de dados de persistência para ter um novo banco de dados, execute os scripts em %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN na seguinte ordem.
- SqlWorkflowInstanceStoreSchema.sql
- SqlWorkflowInstanceStoreLogic.sql
Importante
Se você não criar um banco de dados de persistência, o recurso Repositório de Instâncias de Fluxo de Trabalho SQL lançará uma exceção semelhante à seguinte quando um host tentar persistir fluxos de trabalho.
System.Data.SqlClient.SqlException: Não foi possível encontrar o procedimento armazenado 'System.Activities.DurableInstancing.CreateLockOwner'
As seções a seguir descrevem como habilitar a persistência para fluxos de trabalho e serviços de fluxo de trabalho usando o Repositório de Instâncias de Fluxo de Trabalho SQL. Para obter mais informações sobre as propriedades do Repositório de Instâncias do Fluxo de Trabalho SQL, consulte Propriedades do Repositório de Instâncias do Fluxo de Trabalho SQL.
Habilite a persistência para fluxos de trabalho auto-hospedados que usam WorkflowApplication
Você pode habilitar a persistência para fluxos de trabalho auto-hospedados que usam WorkflowApplication programaticamente usando o modelo de SqlWorkflowInstanceStore objeto. O procedimento a seguir contém etapas para fazer isso.
Adicione uma referência a System.Activities.DurableInstancing.dll.
Adicione a seguinte instrução na parte superior do arquivo de origem após as instruções "using" existentes.
using System.Activities.DurableInstancing;
Construa um SqlWorkflowInstanceStore e atribua-o InstanceStore WorkflowApplication ao do como mostrado no exemplo de código a seguir.
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI"); WorkflowApplication wfApp = new WorkflowApplication(new Workflow1()); wfApp.InstanceStore = store;
Nota
Dependendo da sua edição do SQL Server, o nome do servidor da cadeia de conexão pode ser diferente.
Invoque o Persist WorkflowApplication método no objeto para persistir um fluxo de trabalho ou Unload método para persistir e descarregar um fluxo de trabalho. Você também pode manipular o PersistableIdle evento gerado pelo WorkflowApplication objeto e retornar o membro apropriado (Persist ou Unload) do PersistableIdleAction.
wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { return PersistableIdleAction.Persist; };
Nota
Consulte a etapa Como: Criar e executar um fluxo de trabalho de longa execução do Tutorial de introdução para obter instruções passo a passo.
Habilite a persistência para serviços de fluxo de trabalho auto-hospedados que usam o WorkflowServiceHost
Você pode habilitar a persistência para serviços de fluxo de trabalho auto-hospedados que usam WorkflowServiceHost programaticamente usando a SqlWorkflowInstanceStoreBehavior classe ou a DurableInstancingOptions classe.
Use a classe SqlWorkflowInstanceStoreBehavior
O procedimento a seguir contém etapas para usar a classe para habilitar a SqlWorkflowInstanceStoreBehavior persistência para serviços de fluxo de trabalho auto-hospedados.
Adicione uma referência a System.ServiceModel.dll.
Adicione a seguinte instrução na parte superior do arquivo de origem após as instruções "using" existentes.
using System.ServiceModel.Activities.Description;
Crie uma instância do
WorkflowServiceHost
e adicione 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(), "");
Construa um
SqlWorkflowInstanceStoreBehavior
objeto e defina as 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);
Abra o host do serviço de fluxo de trabalho.
host.Open();
Use a propriedade DurableInstancingOptions
Quando o SqlWorkflowInstanceStoreBehavior
é aplicado, o DurableInstancingOptions.InstanceStore
on é WorkflowServiceHost
definido como o SqlWorkflowInstanceStore
objeto criado usando os valores de configuração. Você pode fazer o mesmo programaticamente para definir a DurableInstancingOptions propriedade do sem usar a SqlWorkflowInstanceStoreBehavior
classe, WorkflowServiceHost
conforme mostrado no exemplo de código a seguir.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Habilite a persistência para serviços de fluxo de trabalho hospedados pelo WAS que usam o WorkflowServiceHost usando um arquivo de configuração
Você pode habilitar a persistência para serviços de fluxo de trabalho auto-hospedados ou hospedados pelo Serviço de Ativação de Processos do Windows (WAS) usando um arquivo de configuração. Um serviço de fluxo de trabalho hospedado pelo WAS usa o WorkflowServiceHost como os serviços de fluxo de trabalho auto-hospedados.
O SqlWorkflowInstanceStoreBehavior
, um comportamento de serviço que permite alterar convenientemente as propriedades do Repositório de Instâncias do Fluxo de Trabalho SQL por meio da configuração XML. Para serviços de fluxo de trabalho hospedados pelo WAS, use o arquivo Web.config. O exemplo de configuração a seguir mostra como configurar o Repositório de Instâncias do Fluxo de Trabalho SQL usando o sqlWorkflowInstanceStore
elemento behavior 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>
Importante
A Microsoft recomenda que você use o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades Gerenciadas para recursos do Azure serão o método de autenticação recomendado.
Se você não definir valores para a connectionString
ou a connectionStringName
propriedade, o Repositório de Instâncias do Fluxo de Trabalho SQL usará a cadeia de DefaultSqlWorkflowInstanceStoreConnectionString
conexão nomeada padrão .
Quando o SqlWorkflowInstanceStoreBehavior
é aplicado, o DurableInstancingOptions.InstanceStore
on é WorkflowServiceHost
definido como o SqlWorkflowInstanceStore
objeto criado usando os valores de configuração. Você pode fazer o mesmo programaticamente para usar o SqlWorkflowInstanceStore
com WorkflowServiceHost
sem usar o elemento de comportamento de serviço.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Importante
É recomendável que você não armazene informações confidenciais, como nomes de usuário e senhas, no arquivo Web.config. Se você armazenar informações confidenciais no arquivo Web.config, deverá proteger o acesso ao arquivo Web.config usando ACLs (Listas de Controle de Acesso) do sistema de arquivos. Além disso, você também pode proteger os valores de configuração dentro de um arquivo de configuração, conforme mencionado em Criptografando informações de configuração usando a configuração protegida.
Elementos Machine.config relacionados ao recurso Repositório de Instâncias do Fluxo de Trabalho SQL
A instalação do .NET Framework 4.6.1 adiciona o seguinte elemento de extensão de comportamento ao arquivo Machine.config para que você possa usar o <sqlWorkflowInstanceStore>
elemento de comportamento de serviço no arquivo de configuração para configurar a persistência para seus 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>