Como: habilitar persistência SQL para fluxos de trabalho e serviços de fluxo de trabalho
Este artigo 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. Arquivos de script SQL das cópias do programa de instalação de .NET Framework 4.6.1 associados ao recurso Repositório de instância de fluxo de trabalho SQL na 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.
- SqlWorkflowInstanceStoreSchema.sql
- 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.
Habilitar 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.
Adicione uma referência a System.Activities.DurableInstancing.dll.
Adicione a seguinte declaração na parte superior do arquivo de origem após a existência declarações “using”.
using System.Activities.DurableInstancing;
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.
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.
Habilitar 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 .
Usar 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.
Adicione uma referência ao System.ServiceModel.dll.
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;
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(), "");
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);
Abra o host serviço de fluxo de trabalho.
host.Open();
Usar 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;
Habilitar 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>
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 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.
Elementos Machine.config relacionados ao recurso de Store de instância de fluxo de trabalho do 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 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>