Compartilhar via


Gerenciamento suspenso da instância

O exemplo SuspendedInstanceManagement demonstra como gerenciar instâncias de fluxo de trabalho que foram suspensas. A ação padrão para WorkflowUnhandledExceptionBehavior é AbandonAndSuspend. Isso significa que por padrão, as exceções não tratadas lançadas de uma instância de fluxo de trabalho hospedada em WorkflowServiceHost causarão a instância a ser descartado de memória (abandonada) e de bens/versão armazenado de instância a ser marcada como suspendida. Uma instância suspendida de fluxo de trabalho não poderá executar até que estado unsuspended.

O exemplo mostra como um utilitário de linha de comando pode ser implementado para consultar instâncias suspensas, e como conceder ao usuário a opção continuar ou finalizar a instância. Nesse exemplo, um serviço de fluxo de trabalho intencionalmente lança uma exceção, fazendo com que fique suspenso. O utilitário de linha de comando pode então ser usado para consultar a instância e posteriormente para continuar ou finalizar a instância.

Demonstra

WorkflowServiceHost com WorkflowUnhandledExceptionBehavior e WorkflowControlEndpoint no Windows Workflow Foundation (WF).

Discussão

O utilitário de linha de comando implementado nesse exemplo é específico da implementação da instância do SQL que envia em .NET Framework 4.6.1. Se você tiver uma implementação personalizada de armazenamento de instância, então você pode adaptar este utilitário substituindo as implementações de WorkflowInstanceCommand no exemplo com as implementações que são específicas para seu armazenamento de instância.

Os comandos SQL fornecidos de blocos de implementação no armazenamento da instância do SQL diretamente listar suspenderam instâncias, e depende em WorkflowControlEndpoint adicionado a WorkflowServiceHost para continuar ou finalizar as instâncias.

Para configurar, compilar, e executar o exemplo

  1. Esse exemplo requer que os seguintes componentes do Windows estão ativados:

    1. Servidor das filas de mensagens da Microsoft (MSMQ)

    2. SQL Server Express

  2. Configurar o base de dados SQL Server.

    1. Em um prompt de comando do Visual Studio, execute "setup.cmd" no diretório de exemplo SuspendedInstanceManagement, que faz o seguinte:

      1. Cria um base de dados de persistência usando o SQL Server Express. Se o base de dados de persistência já existir, então é solto e re-criada

      2. Configura de base de dados para persistência.

      3. Adiciona o IIS APPPOOL \ AUTORIDADE de DefaultAppPool e NT \ serviço de rede para a função de InstanceStoreUsers que foi definida para configurar o base de dados para persistência.

  3. Configurar a fila de serviço.

    1. No Visual Studio, clique com o botão direito do mouse no projeto SampleWorkflowApp e clique em Definir como projeto de inicialização.

    2. Compilar e executar o SampleWorkflowApp pressionando F5. Isso criará a fila necessário.

    3. Pressione Enter para interromper o SampleWorkflowApp.

    4. Abra o console de Gerenciamento do Computador executando Compmgmt.msc de um prompt de comando.

    5. Expanda Serviço e aplicativos, Enfileiramento de mensagens, Filas privativas.

    6. Clique com o botão direito na fila ReceiveTx e selecione Propriedades.

    7. Selecione a guia Segurança e permita que Todos tenham permissões para Receber mensagem, Exibir mensagem e Enviar mensagem.

  4. Agora, executar o exemplo.

    1. No Visual Studio, execute o projeto SampleWorkflowApp novamente sem depurá-lo pressionando Ctrl+F5. Dois endereços de ponto de extremidade será impresso na janela do console: um para o ponto final do aplicativo e então outro de WorkflowControlEndpoint. Uma instância de fluxo de trabalho é criada em seguida, e os registros de controle para essa instância aparecerá na janela do console. A instância de fluxo de trabalho irá acionar uma exceção que causou a instância a ser suspendida e anuladas.

    2. O utilitário de linha de comando pode então ser usado para executar uma ação adicional em uma destas instâncias. A sintaxe para argumentos de linha de comando é como o follows::

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      Os comandos são suportados: Query, Resume, e Terminate. Alterne de InstanceId é necessário somente para Resume e operações de Terminate .

A limpeza (opcional)

  1. Abra o console de gerenciamento do computador executando Commgmt.msc.

  2. Expanda Serviço e aplicativos, Enfileiramento de mensagens, Filas privativas.

  3. Exclua a fila ReceiveTx.

  4. Para remover o base de dados de persistência, cleanup.cmd execução.