Consulta e controle de instância
Este exemplo mostra como usar a consulta de repositório de persistência e provedores de controle. O provedor de consulta expõe uma API C# que permite ao usuário consultar as instâncias armazenadas em um repositório de persistência. O provedor de controle expõe uma API C# que permite ao usuário emitir comandos de controle (suspender, continuar, cancelar, encerrar, excluir) a uma instância armazenada em um repositório de persistência.
Este exemplo contém um serviço de teste WF, um aplicativo de console do Windows para consulta de instâncias, e um aplicativo de console do Windows para controlar instâncias.
Observação
Os exemplos são fornecidos apenas para fins educacionais. Eles não devem ser usados em um ambiente de produção e não foram testados em um ambiente de produção. A Microsoft não oferece suporte técnico para esses exemplos.
Pré-requisitos
Serviços de Informações da Internet (IIS) versão 7.0:
Repositório de persistência inicializado
O Visual Studio 2010 e o Windows Server AppFabric no mesmo computador
Localização do exemplo e arquivos
Um documento leiame está localizado em <samples>\Samples\Hosting\InstanceQueryAndControl.
Todos os arquivos que você precisará executar nesse exemplo estão localizados em <samples>\Samples\Hosting\InstanceQueryAndControl:
A pasta InstanceControl contém todos os arquivos necessários para o aplicativo de exemplo da instância de controle.
A pasta InstanceQuery contém todos os arquivos necessários para o aplicativo de exemplo da instância de consulta.
A pasta TestWorkflow contém todos os arquivos necessários para o fluxo de trabalho de exemplo.
O arquivo de solução InstanceQueryAndControl.sln define a solução que cria todos os artefatos do exemplo.
Configurando e executando esse exemplo
Crie um repositório de persistência, se você ainda não fez isso durante a Instalação do Windows Server AppFabric.
Execute C:\Windows\System32\AppFabric\Microsoft.ApplicationServer. Configuration.exe como Administrador. Na etapa Configurar Trabalhador, marque a caixa de seleção Definir a configuração de persistência. Selecione sqlStoreProvider como seu provedor de persistência e clique em Configurar.
Na janela the Configuração do Repositório de Persistência do SQL, marque as caixas de seleção Adicionar registro do repositório de persistência à configuração de Web raiz e Iniciar repositório de persistência. Especifique o nome do banco de dados do repositório de persistência como ApplicationServerWorkflowInstanceStore. Clique em OK para criar um banco de dados de repositório de persistência com o nome especificado. Se você decidir escolher um nome diferente para o banco de dados, o código de exemplo precisará ser alterado (veja abaixo).
Se você executar esse exemplo em um sistema de 64 bits, copie o arquivo C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.StoreManagement.dll em sua pasta de projeto.
Observação
Você usará esse caminho na etapa 3.
Crie a solução.
Abra o Visual Studio 2010 como Administrador: Clique em Iniciar --> Todos os Programas --> Microsoft Visual Studio 2010. Clique com o botão direito do mouse em Microsoft Visual Studio 2010 e selecione Executar como administrador.
Abra o projeto de exemplo: No Visual Studio, clique em Arquivo --> Abrir --> Projeto/Solução. Selecione o arquivo de solução de exemplo <samples>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln. Quando o arquivo for aberto, o Visual Studio avisa que a URL local do IIS para o serviço de exemplo não foi criada ainda. Confirme a criação do novo diretório virtual.
Se você executar o exemplo em um sistema de 64 bits, execute as seguintes etapas para InstanceQuery e o projeto InstanceControl: Na linha 17 do arquivo Program.cs, altere o caminho do arquivo Microsoft.ApplicationServer.StoreManagement.dll para o local que você copiou o arquivo na etapa 2.
Esse exemplo pressupõe que o fluxo de trabalho persiste no banco de dados de persistência ApplicationServerWorkflowInstanceStore que é hospedado pelo SQL Express. Você pode alterar o nome do banco de dados e a instância do SQL server nas linhas 44 e 45 de Program.cs do projeto InstanceControl e nas linhas 37 e 38 de Program.cs do projeto InstanceQuery.
Pressione F6 para criar a solução. Isso instala automaticamente o aplicativo TestWorkflow no IIS.
Configure o aplicativo TestWorkflow.
Inicie o Gerenciador do IIS: Clique em Iniciar -->Painel de Controle->Ferramentas administrativas --> Gerenciador dos Serviços de Informação (IIS).
Defina o AppPool correto e habilite o protocolo net.pipe para o site.
Na janela Conexões do IIS, selecione o nó <computador</Sites/Site Padrão.
Na janela Ações do IIS, clique em Configurações avançadas.
Altere a configuração de Pool de Aplicativos para ASP.NET v4.0.
Altere Protocolos Habilitados para http,net.pipe. Cuidado: Não deve haver espaços entre a vírgula e net.pipe.
Clique em OK.
Defina o AppPool correto e habilite o protocolo net.pipe para o aplicativo.
Na janela Conexões do IIS, selecione o nó <computador</Sites/Site Padrão/TestWorkflow.
Na janela Ações do IIS, clique em Configurações avançadas.
Altere a configuração de Pool de Aplicativos para ASP.NET v4.0.
Altere Protocolos Habilitados para http,net.pipe. Cuidado: Não deve haver espaços entre a vírgula e net.pipe.
Clique em OK.
Crie instâncias do TestService.
Abra o Cliente de Teste do WCF.
Na janela Conexões do Gerenciador do IIS, selecione o nó <computador</Sites/Site Padrão/TestWorkflow.
Clique com o botão direito do mouse em TestWorkflow e selecione Mudar para o Modo de Exibição de Conteúdo.
Clique com o botão direito do mouse em TestService.xamlx e selecione Procurar. Um navegador da Web é iniciado e exibe a página de boas vindas do TestService.
Abra o Cliente de Teste do WCF da seguinte forma: Abra o Cliente de Teste do WCF. Clique em Iniciar --> Todos os Programas --> Microsoft Visual Studio 2010 --> Ferramentas do Visual Studio --> Prompt de comando do Visual Studio (2010). No prompt de comando, digite o comando wcftestclient.
Na janela de URL do navegador da Web, copie a URL do TestService (por exemplo, https://localhost/TestWorkflow/TestService.xamlx "). No Cliente de Teste do WCF, clique com o botão direito em Meus Projetos de Serviço e selecione Adicionar Serviço. Quando o endereço do ponto de extremidade for solicitado, cole a URL do TestService.
Chame o TestService da seguinte forma:
Na janela do Cliente de Teste do WCF, clique duas vezes no nó Invoke() no IService (BasicHttpBinding_IService).
Na guia Invoke, clique no campo (null) da coluna Valor. Altere a seleção de (null) para System.Nullable<System.Int32>. Agora expanda o nó int na coluna Nome. Uma nova linha aparece com o valor 0.
Clique em Invocar. Isso cria uma instância do TestService que será executada por 10 minutos.
Mude o valor para 1 e clique em Invoke. Isso cria uma instância de TestService que será concluída imediatamente.
Mude o valor para 2 e clique em Invoke. Isso cria uma instância do TestService que lançará uma exceção e será suspensa.
Consulta de instâncias.
No Visual Studio, verifique se InstanceQuery é o projeto de inicialização padrão e pressione F5 para consultar as instâncias. Uma janela de console abre e exibe as três instâncias que você criou na etapa 5.b.
Também é possível executar o comando InstanceQuery no prompt de comando:
- Abra um prompt de comando. Execute o comando <samples>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group].
Controle instâncias.
- No prompt de comando, execute o comando <samples>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete]. Use o GUID ID de instância de 20 caracteres de qualquer uma das instâncias que você criou anteriormente.
Removendo esse exemplo
Exclua todas as instâncias de serviço do serviço TestWorkflow do repositório de persistência. Abra uma janela do console Admin e emita os seguintes comandos:
> powershell > import-module applicationServer > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
Demonstra
O exemplo contém três projetos:
TestWorkflow implementa um serviço do WF. O serviço é hospedado no IIS. Sempre que o serviço for chamado, uma nova instância do serviço será criada. Ao chamar o serviço por meio do Cliente de Teste do WCF, o usuário transmite um parâmetro ao serviço. Dependendo desse parâmetro, a instância é executada durante 10 minutos, encerrada imediatamente ou gera uma exceção.
InstanceQuery implementa um aplicativo de console que emite uma consulta contra o repositório de persistência e imprime os resultados na tela. O usuário deve especificar o tipo de consulta, os parâmetros de consulta, e a seqüência de conexão do repositório de persistência.
InstanceControl implementa um aplicativo de console que emite um comando de controle para uma instância que reside em um repositório de persistência. O usuário deve especificar o tipo de comando, o ID da instância e a cadeia de conexão do repositório de persistência.
Aplicativo de exemplo de consulta de instância
O aplicativo de exemplo de consulta de instância demonstra a função e a API do provedor de consulta do AppFabric. O provedor de consulta permite que o usuário realize três tipos de consultas:
Obter uma lista de instâncias que residem em um repositório de persistência e cujas propriedades correspondem à consulta. Essa consulta retorna uma matriz de instanceInfo.
Obter o número de instâncias que residem em um repositório de persistência e cujas propriedades correspondem à consulta. Essa consulta retorna um Int32.
Obter o número de instâncias que residem em um repositório de persistência e cujas propriedades correspondem à consulta, e agrupá-las de acordo com as categorias definidas. Essa consulta retorna um enumerável do tipo groupingResult.
Para cada tipo de consulta, o provedor de consulta fornece uma API assíncrona que executa a consulta. A entrada e o tipo de retorno variam com o tipo de consulta. Em todos os tipos de consulta, o usuário pode especificar um conjunto de filtros de consulta. O exemplo define todas eles como nulos, o que significa que a consulta tomará todas as instâncias que estiverem no repositório. Além dos parâmetros de filtro de consulta, o usuário precisa fornecer a seqüência de conexão do repositório de persistência. O exemplo pressupõe que as instâncias residem no DefaultSqlWorkflowInstanceStore. Ele também pressupõe que o banco de dados use a segurança integrada do Windows para autenticar o acesso ao banco de dados.
Ao solicitar uma lista de instâncias, o usuário deve especificar o número máximo de instâncias geradas e como as instâncias devem ser ordenadas. Atualmente, o provedor de consultas oferece apenas a ordenação por LastUpdatedTime ou gera uma lista sem ordenação.
Ao solicitar uma contagem agrupada de instâncias, o usuário deve especificar os parâmetros de agrupamento. Esses parâmetros são fornecidos como uma List<GroupingMode>. O primeiro elemento define o grupo principal, e cada elemento seguinte define um subgrupo.
Aplicativo de exemplo de Controle de Instâncias
O aplicativo de exemplo de controle de instância demonstra a função e a API do provedor de controle do AppFabric. O provedor de controle permite ao usuário emitir um comando suspender, retomar, encerrar ou excluir em uma instância. Além do tipo de comando e do ID de instância, o usuário deve informar os identificadores de serviço SiteName, RelativeApplicationPath e VirtualPath. Esses parâmetros são obrigatórios para que o WMS compute o ponto de extremidade de controle da instância de serviço. (Os identificadores de serviço são obrigatórios apenas para Suspender, Retomar, Cancelar e Encerrar. O comando Excluir não é emitido para o ponto de extremidade de controle. Em vez disso, ele é executado diretamente no banco de dados).
Além dos parâmetros de filtro de consulta, o usuário deve fornecer a cadeia de conexão do repositório de persistência. O exemplo pressupõe que as instâncias residem no DefaultSqlWorkflowInstanceStore. Ele também pressupõe que o banco de dados use a segurança integrada do Windows para autenticar o acesso ao banco de dados.
Observe que o aplicativo de exemplo de instância de controle enfileira todos os comandos Suspender, Retomar, Cancelar ou Encerrar na fila de comando do repositório de persistência. O comando é executado em um momento posterior. Use o aplicativo de exemplo de instância de controle para ver se e quando o comando foi executado.
Perceba que um comando para uma instância pode ser enfileirado somente se não houver outro comando pendente enfileirado para essa instância.
A tabela a seguir descreve o efeito dos comandos emitidos em relação a instâncias em vários estados.
Estado atual | Suspender | Retomar | Cancelar | Terminar | Delete |
---|---|---|---|---|---|
Running |
Suspende a instância |
Sem op |
Cancela a instância |
Encerra a instância |
Exclui a instância de repositório de persistência |
Suspenso |
Sem op |
Retoma a instância |
Cancela a instância |
Encerra a instância |
Exclui a instância de repositório de persistência |
Concluído |
Não é permitido |
Não é permitido |
Não é permitido |
Não é permitido |
Exclui a instância de repositório de persistência |
Aviso
Excluir instâncias em execução do repositório de persistência pode causar comportamentos imprevisíveis. Isso não é recomendável.
2011-12-05