Compartilhar via


Conceitos fundamentais do 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, a atividade mais alta na hierarquia pode ser dita para definir o fluxo de trabalho em si. Esse modelo de hierarquia assume o lugar das classes explícitas SequentialWorkflow e StateMachineWorkflow das versões anteriores. As próprias atividades são desenvolvidas como coleções de outras atividades (usando a Activity classe como base, geralmente definidas usando XAML) ou são criadas sob medida usando a CodeActivity classe, que pode usar o runtime para acesso a dados ou usando a NativeActivity classe, que expõe a amplitude do runtime do fluxo de trabalho ao autor da atividade. As 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 Descrição
Variável Armazena dados em uma atividade.
Argumento Move dados para dentro e para fora de uma atividade.
Expressão Uma atividade com um valor de retorno elevado usado em associações de argumento.

Runtime de fluxo de trabalho

O runtime 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 a saída de um fluxo de trabalho.

  • Para adicionar as extensões a ser usadas por atividades.

ActivityInstance é o proxy thread-safe que hospeda pode usar para interagir com o runtime. 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 de ciclo de vida da instância.

  • Para controlar a execução do fluxo de trabalho.

  • Para fornecer entrada ou recuperar a saída de um fluxo de trabalho.

  • Para sinalizar a continuação de um fluxo de trabalho e passar valores para o fluxo de trabalho.

  • Para persistir dados de fluxo de trabalho.

  • Para adicionar as extensões a ser usadas por atividades.

As atividades obtêm acesso ao ambiente de runtime 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 filho e para muitas outras finalidades.

Serviços

Os fluxos de trabalho fornecem uma maneira natural de implementar e acessar serviços flexívelmente acoplados, usando atividades de mensagens. As atividades de mensagens são criadas no WCF e são o principal mecanismo usado para obter dados dentro e fora de um fluxo de trabalho. Você pode compor atividades de mensagens em conjunto para modelar qualquer tipo de padrão de troca de mensagens desejado. 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 a 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, descarga, e fluxos de trabalho longos

O Fluxo de Trabalho do Windows simplifica a criação de programas reativos de execução prolongada fornecendo:

  • Atividades que acessam a entrada externa.

  • A capacidade de criar os objetos de Bookmark que podem ser continuados por um ouvinte host.

  • A capacidade de persistir os dados de um fluxo de trabalho e de descarregar o fluxo de trabalho, e recarregar e reativar no fluxo de trabalho em resposta a ressunção de objetos Bookmark em um fluxo de trabalho específico.

Um fluxo de trabalho executa continuamente as atividades até que não haja mais atividades a serem executadas ou até que todas as atividades em execução estejam aguardando entrada. Neste último estado, o fluxo de trabalho está ocioso. É comum um host descarregar fluxos de trabalho que ficaram ociosos e recarregá-los para continuar a execução quando uma mensagem chega. WorkflowServiceHost fornece a funcionalidade para este recurso e fornece um extensível descarrega a política. Para blocos de execução que usam dados de estado voláteis ou outros dados que não podem ser persistidos, uma atividade pode indicar a um host que ele não deve ser mantido 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.