Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como configurar o recurso de Armazenamento de Instância de Fluxo de Trabalho SQL para ativar a persistência para os seus fluxos de trabalho e serviços de fluxo de trabalho, tanto programaticamente quanto 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 de Armazenamento de Instância de Fluxo de Trabalho SQL, crie uma base 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 Repositório de Instância de Fluxo de Trabalho SQL para a pasta %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Executar esses arquivos de script em uma base de dados SQL Server 2005 ou SQL Server 2008 que você deseja que o SQL Workflow Instance Store use 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.
- SqlWorkflowInstanceStoreSchema.sql
- SqlWorkflowInstanceStoreLogic.sql
Importante
Se você não criar um banco de dados de persistência, o recurso Store de Instância de Fluxo de Trabalho do SQL lança uma exceção similar à seguinte quando um host tenta persistir 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 a persistência de fluxos de trabalho e serviços de fluxo de trabalho usando o SQL Workflow Instance Store. 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.
Habilitar a persistência para fluxos de trabalho auto-hospedados que usam WorkflowApplication
Você pode habilitar a persistência para fluxos de trabalho autogeridos que usam WorkflowApplication usando o modelo de objeto SqlWorkflowInstanceStore programaticamente. O procedimento a seguir contém as etapas para fazer isso.
Adicione uma referência a System.Activities.DurableInstancing.dll.
Adicione a seguinte declaração na parte superior do arquivo de origem após as declarações “using” existentes.
using System.Activities.DurableInstancing;Construa um SqlWorkflowInstanceStore e atribua-o ao InstanceStore do 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.
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 PersistableIdle gerado pelo objeto WorkflowApplication e retornar Persist 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.
Habilitar a persistência para serviços de fluxo de trabalho auto-hospedados que utilizam o WorkflowServiceHost
Você pode ativar a persistência para serviços de fluxo de trabalho auto-hospedados que usam WorkflowServiceHost de forma programática usando a classe SqlWorkflowInstanceStoreBehavior ou a classe DurableInstancingOptions.
Usar a classe de SqlWorkflowInstanceStoreBehavior
O procedimento a seguir contém as etapas para usar a classe SqlWorkflowInstanceStoreBehavior para habilitar a persistência para serviços de fluxo de trabalho autônomos.
Adicione uma referência ao System.ServiceModel.dll.
Adicione a seguinte declaração na parte superior do arquivo de origem após as declarações "using" existentes.
using System.ServiceModel.Activities.Description;Crie uma instância de
WorkflowServiceHoste 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(), "");Criar um objeto de
SqlWorkflowInstanceStoreBehaviore 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);Abra o host de serviço de fluxo de trabalho.
host.Open();
Usar a propriedade de DurableInstancingOptions
Quando SqlWorkflowInstanceStoreBehavior é aplicado, DurableInstancingOptions.InstanceStore em WorkflowServiceHost é configurado para o objeto 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;
Habilitar a persistência para serviços de fluxo de trabalho hospedados no WAS que usam o WorkflowServiceHost, utilizando um arquivo de configuração
Você pode ativar a persistência para serviços de fluxo de trabalho auto-hospedados ou hospedados pelo Windows Process Activation Service (WAS) usando um arquivo de configuração. Um serviço de fluxo de trabalho hospedado no WAS usa o WorkflowServiceHost da mesma forma que os serviços de fluxo de trabalho auto-hospedados.
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 de fluxo de trabalho hospedados no WAS, use o arquivo Web.config. O seguinte exemplo de configuração mostra como configurar o repositório de instâncias de fluxo de trabalho do SQL usando o elemento de comportamento 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>
Importante
A Microsoft recomenda usar 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 é o método de autenticação recomendado.
Se você não definir valores para connectionString ou a propriedade de connectionStringName, a instância de armazenamento de fluxo de trabalho do SQL usa a cadeia de conexão padrão chamada DefaultSqlWorkflowInstanceStoreConnectionString.
Quando SqlWorkflowInstanceStoreBehavior é aplicado, DurableInstancingOptions.InstanceStore em WorkflowServiceHost é configurado para o objeto 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.
Elementos do Machine.config relacionados ao recurso SQL de armazenamento de instâncias de fluxo de trabalho
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 elemento de comportamento de serviço <sqlWorkflowInstanceStore> 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>