Compartilhar via


Internos do host de serviço de fluxo de trabalho

A WorkflowServiceHost fornece um host para serviços de fluxo de trabalho. Ela é responsável por ouvir mensagens de entrada e roteá-las para a instância de serviço de fluxo de trabalho apropriada, além de controlar o descarregamento e a persistência de fluxos de trabalho ociosos e muito mais. Este tópico descreve como a WorkflowServiceHost processa mensagens de entrada.

Visão geral de WorkflowServiceHost

A classe WorkflowServiceHost é usada para hospedar serviços de fluxo de trabalho. Ela escuta as mensagens de entrada e as encaminha para a instância de serviço apropriada, criando novas instâncias ou carregando instâncias existentes do armazenamento durável, conforme necessário. O diagrama a seguir ilustra em alto nível como a WorkflowServiceHost funciona:

Diagram that shows an overview of the Workflow Service Host.

Esse diagrama mostra que a WorkflowServiceHost carrega definições de serviço de fluxo de trabalho de arquivos .xamlx e carrega informações de configuração de um arquivo de configuração. Ela também carrega a configuração de acompanhamento do perfil de acompanhamento. A WorkflowServiceHost expõe um ponto de extremidade de controle de fluxo de trabalho que permite enviar operações de controle para instâncias de fluxo de trabalho. Para obter mais informações, confira Exemplo de ponto de extremidade de controle de fluxo de trabalho.

A WorkflowServiceHost também expõe pontos de extremidade de aplicativo que escutam mensagens de aplicativo de entrada. Quando uma mensagem de entrada chega, ela é enviada para a instância de serviço de fluxo de trabalho apropriada (caso esteja carregada no momento). Se for necessário, uma nova instância de fluxo de trabalho será criada. Ou, caso uma instância existente tenha sido mantida, ela será carregada a partir do repositório de persistência.

Detalhes da WorkflowServiceHost

O diagrama a seguir mostra com um pouco mais de detalhes como a WorkflowServiceHost lida com as mensagens:

Diagram that shows the Workflow Service Host message flow.

Esse diagrama mostra três pontos de extremidade diferentes: um de aplicativo; um de controle de fluxo de trabalho; e um de hospedagem de fluxo de trabalho. O ponto de extremidade do aplicativo recebe mensagens associadas a uma instância de fluxo de trabalho específica. O ponto de extremidade do controle de fluxo de trabalho escuta as operações de controle. O ponto de extremidade da hospedagem de fluxo de trabalho escuta mensagens que fazem com que a WorkflowServiceHost carregue e execute fluxos de trabalho de não serviço. Conforme mostrado no diagrama, todas as mensagens são processadas por meio do runtime do WCF. A limitação da instância de serviço de fluxo de trabalho é obtida usando-se a propriedade MaxConcurrentInstances. Essa propriedade limitará a quantidade de instâncias de serviço de fluxo de trabalho simultâneas. Quando essa restrição for excedida, todas as solicitações adicionais para novas instâncias de serviço de fluxo de trabalho ou para ativar instâncias de fluxo de trabalho persistentes serão enfileiradas. As solicitações enfileiradas são processadas na ordem PEPS (primeiro a entrar, primeiro a sair), independentemente de serem solicitações para uma nova instância ou uma instância persistente em execução. As informações de política de host carregadas determinam como as exceções sem tratamento são tratadas e como os serviços de fluxo de trabalho ociosos são descarregados e persistidos. Para obter mais informações sobre esses tópicos, confira Como configurar um comportamento de exceção não tratado de fluxo de trabalho com WorkflowServiceHost e Como configurar o comportamento ocioso com WorkflowServiceHost. As instâncias de fluxo de trabalho são mantidas de acordo com as políticas de host e são recarregadas quando necessário. Para obter mais informações sobre persistência de fluxo de trabalho, confira: Como configurar a persistência com WorkflowServiceHost, Como criar um serviço de fluxo de trabalho de execução longa e Persistência de fluxo de trabalho.

A ilustração a seguir mostra o fluxo quando WorkflowServiceHost.Open é chamada:

Diagram that shows the flow when WorkflowServiceHost.Open is called.

O fluxo de trabalho é carregado a partir da XAML, e a árvore de atividades é criada. A WorkflowServiceHost percorre a árvore de atividades e cria a descrição do serviço. A configuração é aplicada ao host. Por fim, o host começa a escutar as mensagens de entrada.

A ilustração a seguir mostra o que a WorkflowServiceHost faz ao receber uma mensagem associada a uma atividade Receive que tem CanCreateInstance definida como true:

Decision tree used by the WFS Host when it receives a message and CanCreateInstance is true.

A mensagem chega e é processada pela pilha de canais do WCF. As restrições são verificadas, e as consultas de correlação são executadas. Se a mensagem estiver associada a uma instância existente, a mensagem será entregue. Caso uma nova instância precise ser criada, a propriedade CanCreateInstance da atividade Receive será verificada. Se for definida como true, uma nova instância será criada e a mensagem será entregue.

A ilustração a seguir mostra o que a classe WorkflowServiceHost faz ao receber uma mensagem associada a uma atividade Receive que tem CanCreateInstance definida como false.

Decision tree used by the WFS Host when it receives a message and CanCreateInstance is false.

A mensagem chega e é processada pela pilha de canais do WCF. As restrições são verificadas, e as consultas de correlação são executadas. A mensagem é associada a uma instância existente (porque CanCreateInstance é false) para que a instância seja carregada a partir do repositório de persistência, o indicador seja retomado e o fluxo de trabalho seja executado.

Aviso

A abertura do Host de Serviço de Fluxo de Trabalho falhará caso o SQL Server esteja configurado para escutar somente no protocolo NamedPipe.

Confira também