Partilhar via


Internos do Host do Serviço de Fluxo de Trabalho

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

Visão geral do WorkflowServiceHost

A WorkflowServiceHost classe é usada para hospedar serviços de fluxo de trabalho. Ele escuta as mensagens recebidas 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 WorkflowServiceHost funciona:

Diagram that shows an overview of the Workflow Service Host.

Este diagrama mostra que 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. Ele também carrega a configuração de rastreamento do perfil de rastreamento. 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, consulte Exemplo de ponto de extremidade de controle de fluxo de trabalho.

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

Detalhes do WorkflowServiceHost

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

Diagram that shows the Workflow Service Host message flow.

Este diagrama mostra três pontos de extremidade diferentes, um ponto de extremidade de aplicativo, um ponto de extremidade de controle de fluxo de trabalho e um ponto de extremidade de hospedagem de fluxo de trabalho. O ponto de extremidade do aplicativo recebe mensagens vinculadas a uma instância de fluxo de trabalho específica. O ponto de extremidade de controle de fluxo de trabalho escuta as operações de controle. O ponto de extremidade de hospedagem de fluxo de trabalho escuta mensagens que fazem com WorkflowServiceHost que sejam carregadas e executadas fluxos de trabalho que não sejam de serviço. Como mostrado no diagrama, todas as mensagens são processadas através do tempo de execução do WCF. A limitação da instância do serviço de fluxo de trabalho é obtida usando a MaxConcurrentInstances propriedade. Essa propriedade limitará o número de instâncias de serviço de fluxo de trabalho simultâneas. Quando essa limitação for excedida, todas as solicitações adicionais para novas instâncias de serviço de fluxo de trabalho ou solicitações para ativar instâncias de fluxo de trabalho persistentes serão enfileiradas. As solicitações enfileiradas são processadas em ordem FIFO, independentemente de serem solicitações para uma nova instância ou uma instância persistente em execução. As informações da política de host são carregadas para determinar como as exceções não tratadas são tratadas e como os serviços de fluxo de trabalho ociosos são descarregados e persistentes. Para obter mais informações sobre esses tópicos, consulte Como configurar o comportamento de exceção não tratada do 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, consulte: Como configurar a persistência com WorkflowServiceHost, Criando um serviço de fluxo de trabalho de longa execução e Persistência de fluxo de trabalho.

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

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

O fluxo de trabalho é carregado a partir de XAML e a árvore de atividades é criada. WorkflowServiceHost Percorre a árvore de atividades e cria a descrição do serviço. A configuração é aplicada ao host. Finalmente, o anfitrião começa a ouvir as mensagens recebidas.

A ilustração a seguir mostra o que o WorkflowServiceHost faz quando recebe uma mensagem vinculada a uma atividade de recebimento que tem CanCreateInstance definido 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 WCF. Os aceleradores são verificados e as consultas de correlação são executadas. Se a mensagem estiver vinculada a uma instância existente, a mensagem será entregue. Se uma nova instância precisar ser criada, a propriedade CanCreateInstance da atividade Receive será marcada. Se for definido como true, uma nova instância será criada e a mensagem será entregue.

A ilustração a seguir mostra o que o WorkflowServiceHost faz quando recebe uma mensagem vinculada a uma atividade Receive que tem CanCreateInstance definido 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 WCF. Os aceleradores são verificados e as consultas de correlação são executadas. A mensagem é vinculada a uma instância existente (porque CanCreateInstance é false) para que a instância seja carregada do repositório de persistência, o marcador seja retomado e o fluxo de trabalho seja executado.

Aviso

O Host do Serviço de Fluxo de Trabalho falhará ao abrir se o SQL Server estiver configurado para escutar somente no protocolo NamedPipe.

Consulte também