Conceitos fundamentais de fluxo de trabalho do Windows
O desenvolvimento de fluxo de trabalho no .NET Framework 4.6.1 usa conceitos que podem ser novos para alguns desenvolvedores. Este tópico descreve alguns dos conceitos e como eles são implementados.
Fluxos de trabalho e atividades
Um fluxo de trabalho é uma coleção estruturada de ações que modela um processo. Cada ação no fluxo de trabalho é modelada como uma atividade. Um host interage com um fluxo de trabalho usando WorkflowInvoker para invocar um fluxo de trabalho como se fosse um método, WorkflowApplication para controle explícito sobre a execução de uma única instância de fluxo de trabalho e WorkflowServiceHost para interações baseadas em mensagens em cenários de várias instâncias. Como as etapas do fluxo de trabalho são definidas como uma hierarquia de atividades, pode-se dizer que a atividade mais alta na hierarquia define o próprio fluxo de trabalho. Este modelo hierárquico substitui o explícito SequentialWorkflow
e StateMachineWorkflow
as classes das versões anteriores. As próprias atividades são desenvolvidas como coleções de outras atividades (usando a Activity classe como base, geralmente definida usando XAML) ou são criadas de forma personalizada usando a CodeActivity classe, que pode usar o tempo de execução para acesso a dados, ou usando a NativeActivity classe, que expõe a amplitude do tempo de execução do fluxo de trabalho ao autor da atividade. Atividades desenvolvidas usando CodeActivity e NativeActivity são criadas usando linguagens compatíveis com CLR, como C#.
Modelo de Dados de Atividade
As atividades armazenam e compartilham dados usando os tipos mostrados na tabela a seguir.
Tipo | Description |
---|---|
Variável | Armazena dados em uma atividade. |
Argumento | Move dados para dentro e para fora de uma atividade. |
Expression | Uma atividade com um valor de retorno elevado usado em associações de argumento. |
Tempo de execução do fluxo de trabalho
O tempo de execução do fluxo de trabalho é o ambiente no qual os fluxos de trabalho são executados. WorkflowInvoker é a maneira mais simples de executar um fluxo de trabalho. O host usa WorkflowInvoker para o seguinte:
Para invocar um fluxo de trabalho de forma síncrona.
Para fornecer entrada ou recuperar saída de um fluxo de trabalho.
Para adicionar extensões a serem usadas pelas atividades.
ActivityInstance é o proxy thread-safe que os hosts podem usar para interagir com o tempo de execução. O host usa ActivityInstance para o seguinte:
Para adquirir uma instância criando-a ou carregando-a de um repositório de instâncias.
Para ser notificado de eventos do ciclo de vida da instância.
Para controlar a execução do fluxo de trabalho.
Para fornecer entrada ou recuperar saída de um fluxo de trabalho.
Para sinalizar uma continuação do fluxo de trabalho e passar valores para o fluxo de trabalho.
Para persistir os dados do fluxo de trabalho.
Para adicionar extensões a serem usadas pelas atividades.
As atividades obtêm acesso ao ambiente de tempo de execução do fluxo de trabalho usando a classe derivada apropriada ActivityContext , como NativeActivityContext ou CodeActivityContext. Eles usam isso para resolver argumentos e variáveis, para agendar atividades infantis e para muitos outros fins.
Serviços
Os fluxos de trabalho fornecem uma maneira natural de implementar e acessar serviços de acoplamento flexível, usando atividades de mensagens. As atividades de mensagens são criadas no WCF e são o principal mecanismo usado para entrar e sair de dados de um fluxo de trabalho. Você pode compor atividades de mensagens juntas para modelar qualquer tipo de padrão de troca de mensagens que desejar. Para obter mais informações, consulte Atividades de mensagens. Os serviços de fluxo de trabalho são hospedados usando a WorkflowServiceHost classe. Para obter mais informações, consulte Visão geral dos serviços de fluxo de trabalho de hospedagem. Para obter mais informações sobre serviços de fluxo de trabalho, consulte Serviços de fluxo de trabalho
Persistência, descarregamento e fluxos de trabalho de longa execução
O Fluxo de Trabalho do Windows simplifica a criação de programas reativos de longa execução, fornecendo:
Atividades que acessam insumos externos.
A capacidade de criar Bookmark objetos que podem ser retomados por um ouvinte host.
A capacidade de persistir os dados de um fluxo de trabalho e descarregar o fluxo de trabalho e, em seguida, recarregar e reativar o fluxo de trabalho em resposta à retomada de objetos em um fluxo de Bookmark trabalho específico.
Um fluxo de trabalho executa atividades continuamente até que não haja mais atividades para executar ou até que todas as atividades atualmente em execução estejam aguardando entrada. Neste último estado, o fluxo de trabalho está ocioso. É comum que um host descarregue fluxos de trabalho que ficaram ociosos e os recarregue para continuar a execução quando uma mensagem chegar. WorkflowServiceHost fornece funcionalidade para esse recurso e fornece uma política de descarga extensível. Para blocos de execução que usam dados de estado voláteis ou outros dados que não podem ser persistentes, uma atividade pode indicar a um host que ela não deve ser persistida usando o NoPersistHandle. Um fluxo de trabalho também pode persistir explicitamente seus dados em um meio de armazenamento durável usando a Persist atividade.