Serviço de gerenciamento de fluxo de trabalho
O serviço de Gerenciamento de Fluxo de Trabalho (WMS) é um serviço do Windows que fornece os seguintes serviços de gerenciamento para instâncias de serviço de fluxo de trabalho:
Ativação de instâncias de serviço de fluxo de trabalho. O WMS ativa instâncias de serviço de fluxo de trabalho em um repositório de instâncias quando as instâncias ficam ativáveis. Uma instância de serviço de fluxo de trabalho em um repositório de instâncias será considerada ativável se a instância se tornar executável e um host de serviço que corresponde à instância não estiver em execução no computador local. A seguinte lista tem motivos para uma instância se tornar executável:
A instância é descarregada e persistida enquanto aguarda que uma atividade atrasada seja concluída e a atividade atrasada é concluída.
O host de serviço é desligado enquanto a instância é carregada.
A instâncias tem um bloqueio de instância expirado.
Execução de comandos de controle do usuário. Um provedor de controle de instância em um repositório de instâncias adiciona comandos que ele recebe dos cmdlets instance-control do Windows PowerShell para uma fila no repositório de instâncias. Essa fila é criada e atualizada pelo provedor de controle de instância. O WMS recupera os comandos da fila, executa-os e exclui comandos da fila se a execução do comando tiver êxito.
O restante do tópico explica esses serviços detalhadamente. Para aprender sobre instalação e configuração do WMS, consulte Instalando e configurando o Serviço de Gerenciamento de Fluxo de Trabalho.
Ativação de instâncias de serviço de fluxo de trabalho
Por padrão, o WMS automaticamente descobre os repositórios de instâncias necessários para monitorar instâncias de fluxo de trabalho ativáveis. Ele faz isso examinando arquivos Web.config nos níveis raiz, de site e aplicativo durante a inicialização do serviço e quando um desses arquivos de configuração é alterado. Você também pode especificar repositórios de instâncias específicos que deseja que o WMS monitore em vez de descobrir repositórios de instâncias automaticamente.
O WMS cria um objeto InstanceStore e assina o HasActivatableWorkflowEvent para cada repositório de instâncias descoberto. Um repositório de instância aumenta o HasActivatableWorkflowEvent ao encontrar uma instância de Fluxo de Trabalho ativável no repositório. Depois disso, o repositório de instâncias para de monitorar até que QueryActivatableWorkflowsCommand seja chamado uma vez no repositório.
Quando o WMS recebe o HasActivatableWorkflowEvent, ele executa o QueryActivatableWorkflowsCommand no repositório de instâncias para obter parâmetros de ativação que ele usa para criar um host de fluxo de trabalho.
Em seguida, o WMS chama o Serviço de Gerenciamento de Serviços compatível com o aplicativo que contém o serviço cuja instância precisa ser ativada e passa os parâmetros de ativação para ela. O AppFabric adiciona automaticamente o Serviço de Gerenciamento de Serviços, um serviço WCF, a todos os aplicativos que têm o atributo serviceManagement habilitado. O Serviço de Gerenciamento de Serviços expõe um Ponto de Extremidade de Ativação de Serviço, que o WMS acessa usando o endereço que ele constrói usando o nome do site, o caminho do aplicativo virtual e o endereço do Ponto de Extremidade de Ativação de Serviço bem conhecido. O WMS usa associação net.pipe para esse ponto de extremidade. Consulte Serviço de gerenciamento de serviços, para obter informações sobre esse serviço.
O Serviço de Gerenciamento de Serviços ativa um host de serviço de fluxo de trabalho usando parâmetros de ativação que ele recebe do WMS. O host de serviço cria um repositório de instâncias (como o Repositório de Instâncias de Fluxo de Trabalho SQL) e chama um método no repositório para carregar a instância de serviço de fluxo de trabalho do repositório de instâncias na memória.
Aviso
O WMS escolhe instantaneamente quaisquer alterações aos comportamentos do Repositório de Instâncias de Fluxo de Trabalho SQL (SWIS) e definições correspondentes do repositório de instâncias nos arquivos de configuração e começa a monitorar esses repositórios. No entanto, um aplicativo continuará a usar o repositório de instâncias que foi especificado no comportamento do SWIS na versão anterior do arquivo de configuração até que o domínio do aplicativo seja reciclado. O domínio de aplicativo é reciclado após o período de tempo especificado pelo atributo delayNotificationTimeout do elemento httpRuntime. Por exemplo, se delayNotificationTimeout estiver definido como 5000 (<httpRuntime delayNotificationTimeout = "5000" />), o domínio de aplicativo não será reciclado nos próximos 5000 segundos.
Aviso
Se você desabilitar aplicativos ou pools de aplicativo que contêm 1000 ou mais serviços no total o WMS poderá não mais ativar instâncias de serviço ativáveis. A solução alternativa é suspender instâncias de serviços que pertencem a esses aplicativos/pools de aplicativos antes de desativar ou desabilitar os aplicativos/pools de aplicativos.
Execução de comandos de controle do usuário
Quando você usa um comando em uma instância de serviço de fluxo de trabalho usando um cmdlet do Windows PowerShell, um provedor de controle de instância adiciona o comando a uma fila de comandos no repositório de instâncias usado pelo serviço. A fila de comandos é mantida pelo provedor de controle de instância.
O WMS descobre automaticamente repositórios de instâncias necessários para monitorar comandos. Ele faz isso examinando arquivos Web.config nos níveis raiz, de site e aplicativo durante a inicialização e quando um desses arquivos de configuração é alterado. O WMS cria um provedor de controle de instância para cada instância que ele descobre e controla o provedor de comandos em intervalos regulares. Especificamente, o WMS chama o método BeginTryReceive em um provedor de controle de instância para receber comandos.
O provedor de controle de instância por sua vez recupera um comando, mas não exclui da fila de comandos no repositório de instâncias e retorna o comando para o WMS. O provedor coloca um bloqueio com um tempo de expiração curto no comando na fila de comandos.
O WMS então chama um método apropriado do Ponto de Extremidade de Controle de Instância (ICE) exposto pelo host de serviço de fluxo de trabalho para executar o comando na instância de serviço de fluxo de trabalho de destino. O WMS requer que o ponto de extremidade de controle de instância habilite uma associação net.pipe e tenha a segurança de transporte habilitada. O WMS constrói um endereço de ponto de extremidade combinando o nome do site, o caminho do serviço virtual e o caminho ICE bem conhecido. O provedor de controle de instância fornece o nome do site e as informações do caminho de serviço virtual. A associação ICE é inserida em código para a associação net.pipe.
Se a execução de comando tiver êxito, o WMS chamará o método Complete no provedor de controle de instância e o provedor removerá o comando da fila de comandos. Se a execução de comando falhar, o WMS chamará o método Abandon no provedor de controle de instância sobre a falha e caberá ao provedor decidir se remove ou mantém o comando na fila de comandos para tentativas adicionais. O provedor de controle de instância para o Repositório de Instâncias de Fluxo de Trabalho SQL tenta um comando cinco vezes antes de removê-lo da fila de comandos. Se o WMS falhar durante a execução de um comando, o bloqueio eventualmente expirará e o comando poderá ser escolhido pela mesma instância de WMS ou outra instância de WMS mais tarde.
Se o Coordenador de transações distribuídas da Microsoft (MSDTC) estiver habilitado e habilitou comunicação de entrada e de saída, os comandos de controle de instância serão executados de forma transacional. Por exemplo, se você suspender uma instância de serviço de fluxo de trabalho, o status será exibido no Gerenciador do IIS ou retornado do cmdlet como Suspenso imediatamente após o processamento do comando. No entanto, se o MSDTC estiver desabilitado ou não estiver configurado corretamente, os comandos de controle de instância serão executados de maneira não transacional. Neste caso, o status da instância não será atualizado para Suspenso até que a instância seja descarregada e persistida no repositório de instâncias porque a instância está inativa por mais tempo que o período especificado (Descarregar quando ocioso). Observe que se você alterar as configurações do MSDTC, você precisará reiniciar o WMS para que o serviço escolha as configurações atualizadas do MSDTC.
Dica
Se você perceber que um ou mais comandos de controle de instância permanece no estado pendente por mais tempo do que o esperado, verifique se o WSM está sendo executado em cada servidor no farm de servidores. Se a instância estiver sendo executada atualmente em um servidor específico (conforme as informações de monitoramento) e um comando de controle emitido para essa instância não estiver sendo executado, você precisará verificar se o WMS está sendo executado no servidor.
Aviso
O Serviço de Gerenciamento de Fluxo de Trabalho usará comandos transacionados se as configurações de DTC "Permitir Entrada" e Permitir Saída" estiverem habilitadas. Se você desabilitar DTC, certifique-se de também desabilitar explicitamente essas configurações para que comandos não transacionados sejam usados.
Suporte a ambientes de farm de servidores
Normalmente, cada nó em um farm de servidores executa uma instância de WMS. Uma instância de WMS pode monitorar vários repositórios de instâncias. Um nó pode executar várias instâncias de WMS sob diferentes identidades do Windows. Recomendamos que você execute apenas uma instância do WMS para um repositório de instâncias em um nó. Se você executar várias instâncias de WMS no mesmo nó monitorando o mesmo repositório de instâncias, você poderá executar em emissões de escalabilidade.
Uma instância executada em um nó pode ser escolhida pelo WMS em outro nó e pode ser ativada nesse nó. Isso ajuda a equilibrar a carga de trabalho do WMS no farm de servidores.
Quando você emite um comando de controle em uma instância de Fluxo de Trabalho, essa instância de Fluxo de Trabalho pode ser executada em qualquer lugar no farm ou não. O WMS entrega o comando para o computador que executa o fluxo de trabalho ou instrui o computador local para carregar o fluxo de trabalho e executar o comando. Isso permite que você emita comandos para instâncias sem saber em qual computador a instância está sendo executada.
Recursos dependentes
Os seguintes pontos aplicam-se ao Serviço de Gerenciamento de Fluxo de Trabalho (WMS):
O WMS ativa e executa comandos em instâncias de serviços de fluxo de trabalho que são hospedados usando WorkflowServiceHost somente no ambiente IIS/WAS. O WMS não dá suporte a serviços de fluxo de trabalho hospedados usando um host diferente ou em um ambiente de hospedagem diferente.
O WMS ativa instâncias de serviços de fluxo de trabalho que usam um repositório de instâncias para persistência de estado durável.
O WMS ativa instâncias de serviços de fluxo de trabalho que pertencem a um aplicativo que fornece o Serviço de Gerenciamento de Serviços. O WMS usa o Serviço de Gerenciamento de Serviços para ativar um host de serviço que, por sua vez, carregará uma instância no repositório de instâncias.
O WMS requer que a associação net.pipe seja adicionada ao site e que o protocolo net.pipe seja habilitado no aplicativo que contém o serviço. O WMS registrará um erro no log de eventos se o protocolo net.pipe não estiver habilitado no aplicativo.
O WMS requer que uma instância de serviço de fluxo de trabalho exponha um ponto de extremidade de controle de instância (ICE). O WMS usa esse ponto de extremidade para emitir comandos como Suspender e Continuar em instâncias de serviço de fluxo de trabalho.
O WMS funciona com qualquer repositório de instâncias fornecido com um provedor de repositório de instâncias e um provedor de controle de instância.
O WMS requer que um repositório de instâncias para aumentar o HasActivatableWorkflowsEvent quando uma instância se torna ativável.
Dica
Para obter informações relacionadas à segurança sobre o WMS, consulte Configuração de segurança em repositórios de persistência.
Segurança
O Serviço de Gerenciamento de Fluxo de Trabalho (WMS) precisa conectar-se ao Ponto de Extremidade de Controle de Instância (ICE) exposto por um host de serviço de fluxo de trabalho para controlar instâncias de serviço de fluxo de trabalho e ao Ponto de Extremidade de Gerenciamento de Serviço exposto por um aplicativo da Web para iniciar um host de serviço de fluxo de trabalho e carregar instâncias de serviço de fluxo de trabalho. O grupo AS_Administrators tem acesso a ambos pontos de extremidade. O Identificador de Segurança (SID) do Serviço de Gerenciamento de Fluxo de Trabalho do AppFabric é um membro desse grupo. Por isso, você não precisa adicionar a conta na qual o WMS está sendo executado ao grupo AS_Administrators explicitamente.
A seguinte lista fornece orientações para proteger repositórios de instâncias e arquivos de configuração que o WMS usa:
O WMS lê informações de configuração, como cadeias de conexão dos arquivos de configuração na memória. O WMS não processa cadeias de conexão criptografadas nesse momento, então a cadeia de conexão precisa estar no formato de texto simples. Um usuário mal-intencionado obtém acesso a informações confidenciais (como nome de usuário e senha em uma cadeia de conexão) na memória. Por essa razão, você não deve especificar informações confidenciais em uma cadeia de conexão definida em um arquivo de configuração.
Recomendamos que você use a autenticação integrada do Windows para cadeias de conexão armazenadas em arquivos Web.config. Se você não puder usar a autenticação integrada do Windows e especificar um nome de usuário e senha em uma cadeia de conexão definida em um arquivo Web.config, defina as ACLs apropriadas nos arquivos de configuração. Certifique-se de que o grupo AS_Administrators tenha acesso a arquivos Web.config que o WMS precisa acessar. Saiba que configurar ACLs não evita que um usuário mal-intencionado acesse informações da cadeia de conexão na memória.
Habilite a comunicação SQL criptografada adicionando “;Encrypt=yes” à cadeia de conexão SQL. Se você estiver usando a classe SqlConnectionStringBuilder para criar uma cadeia de conexão, defina a propriedade Encrypt como true. Consulte https://go.microsoft.com/fwlink/?LinkID=187283 (a página pode estar em inglês) para obter detalhes sobre como habilitar a comunicação criptografada no servidor. Um usuário mal-intencionado poderá manipular ou executar comandos no banco de dados do SQL Server se a comunicação entre seu aplicativo e o SQL Server não estiver protegida.
Uma fila de comandos não mantém nenhuma informação de credencial. Um usuário que é membro do grupo AS_Administrators, mapeado para a função SQL WorkflowAdministrators, tem o direito de controlar todas as instâncias no repositório de instâncias e não qualquer tipo específico de instâncias. Por isso, as instâncias que não foram desenvolvidas para serem controladas por usuários diferentes devem ser armazenadas em repositórios de instâncias diferentes e a função SQL WorkflowAdministrators para esses repositórios deve ser mapeada para diferentes grupos do Windows.
Sempre que um arquivo Web.config file é modificado, o WMS lê o arquivo e verifica se as definições do repositório foram adicionadas ou removidas do arquivo. Para evitar que usuários não autorizados acionem o processamento de arquivo do WMS, recomendamos que você restrinja o acesso de gravação a arquivos Web. config.
Dependendo do nível de controle, o recurso de monitoramento do AppFabric reúne dados em grandes taxas. Nós recomendados que você não coloque os repositórios de monitoramento e persistência no mesmo banco de dados. Assim , um estouro do repositório de monitoramento não afeta o subsistema de persistência.
A tabela a seguir descreve as funções SQL que protegem o acesso à fila de comandos e ao banco de dados de persistência. O conteúdo dessa tabela aplica-se ao Repositório de Instâncias de Fluxo de Trabalho SQL.
Função SQL | Descrição | Grupo do Windows |
---|---|---|
WorkflowAdministrators |
Um membro dessa função pode enfileirar comandos (adicionar comandos) na fila de comandos, que é parte do banco de dados de persistência. Um usuário que deseja controlar instâncias (por exemplo, usando cmdlets do Windows PowerShell) deve ser um membro dessa função. |
AS_Administrators |
WorkflowManagementServiceUsers |
Um membro dessa função pode tirar da fila (recuperar comandos) da fila de comandos. A conta na qual o WMS é executado deve ser um membro dessa função de modo que o WMS possa recuperar comandos armazenados na fila de comandos. |
AS_Administrators |
WorkflowActivationUsers |
Um membro dessa função pode ativar instâncias de serviço de fluxo de trabalho que são persistentes no banco de dados de persistência e estão prontas para execução. |
AS_Administrators |
InstanceStoreObservers |
Um membro dessa função pode consultar o repositório de instância em instâncias e recuperar comandos da fila de comandos no repositório. |
AS_Administrators e AS_Observers |
InstanceStoreUsers |
Um membro dessa função pode carregar e salvar instâncias. As ações carregar e salvar são executadas por um host de serviço executado em um fluxo de trabalho. Se as instâncias de um serviço Service1 persistirem em um repositório de instâncias Store1, então o pool de aplicativos AppPool1 que executa o host de serviço deverá ser executado sob a identidade que tem direitos do usuário em Store1. |
IIS_USRS |
Para obter orientação de segurança baseada no cenário para persistência, consulte Configuração de segurança em repositórios de persistência.
Consulte também
Conceitos
Configuração de segurança em repositórios de persistência
Instalando e configurando o Serviço de Gerenciamento de Fluxo de Trabalho
2012-03-05