Provedores de repositório de instância, consulta e controle
Um repositório de instâncias é um contêiner lógico de instâncias. É o local no qual os dados e metadados da instância são armazenados. Um repositório de instâncias não implica no armazenamento físico dedicado. Um repositório de instâncias pode conter informações duráveis em um banco de dados SQL Server ou informações de estado não duráveis em uma memória. O .NET Framework versão 4 inclui o Repositório de Instâncias do Fluxo de Trabalho SQL, que é uma implementação concreta de um repositório de instâncias que permite que fluxos de trabalho persistam dados e metadados da instância em um banco de dados SQL Server 2005 ou SQL Server 2008. Para obter mais informações, consulte Repositórios de Instâncias (https://go.microsoft.com/fwlink/?LinkId=181533) na ajuda do .NET Framework. O AppFabric dá suporte à persistência de instâncias de serviços do fluxo de trabalho apenas para bancos de dados SQL Server 2008.
Para usar um repositório de instâncias com a ferramenta de AppFabric (cmdlets do Windows PowerShell e extensões do Gerenciador de IIS) e com o Serviço de Gerenciamento de Fluxo de Trabalho, você precisa desenvolver um provedor de repositório de instâncias, um provedor de consulta de instâncias e um provedor de controle de instâncias nesse repositório de instâncias. As seções a seguir descrevem esses três tipos de provedores.
Observação
A API do provedor de controle e consulta de instâncias baseia-se no .NET Framework 2.0, enquanto que a API do provedor de repositório de instância baseia-se no .NET Framework versão 4
Provedores de repositório de instâncias
Um provedor de repositório de instâncias expõe uma API que o cliente chama para criar objetos do repositório de instâncias. O cliente usa o objeto do repositório de instâncias para salvar uma instância do fluxo de trabalho no repositório de instâncias subjacente (por exemplo: um banco de dados SQL Server) ou para carregar uma instância do repositório de instâncias.
AppFabric inclui um provedor de repositório de instâncias para o Repositório de Instâncias do Fluxo de Trabalho SQL. Para oferecer suporte a um repositório de instâncias diferente, você deve criar um provedor de repositório de instâncias para esse repositório de instâncias. Para criar um provedor de repositório de instâncias, é necessário criar uma classe que derive da classe InstanceStoreProvider e implementar métodos que criem um repositório de instâncias, como SqlWorkflowInstanceStore. Para obter mais informações, consulte Como: Desenvolver provedores de repositório de instância.
Provedores de consulta de instâncias
Um provedor de consulta de instâncias para um repositório de instâncias permite que você emita consultas no repositório de instâncias. Ao usar um cmdlet, como Get-ASAppServiceInstance, para consultar instâncias em um repositório de instâncias, o cmdlet cria um objeto do provedor de consulta e chama métodos no objeto. O objeto do provedor de consulta cria e executa consultas no repositório de instâncias e retorna os resultados da consulta para o cmdlet. As extensões do Gerenciador do IIS do AppFabric usam cmdlets na maioria dos cenários para fazer consultas nos repositórios de instâncias. Portanto, elas também dependem dos provedores de consulta.
Todos os provedores de consulta implementam a mesma API e fornecem uma camada de abstração nos repositórios de instâncias diversas subjacentes. O AppFabric inclui um provedor de consulta de instâncias para o Repositório de Instâncias do Fluxo de Trabalho SQL, que permite que você consulte as instâncias armazenadas no banco de dados de persistência SQL Server. Quando o provedor de consultas SQL recebe uma consulta de um cliente (como um cmdlet do Windows PowerShell), ele consulta e recupera dados da instância do banco de dados SQL Server e retorna o conjunto de resultados para o cliente. A implementação do provedor de consulta de instâncias do Repositório de Instâncias do Fluxo de Trabalho SQL está em Microsoft.ApplicationServer.StoreManagement.dll.
Para oferecer suporte à consulta de um tipo diferente de repositório de instâncias, é necessário ter um provedor de consulta de instâncias nesse repositório. Para criar um provedor de consulta personalizado, é necessário criar uma classe que derive da classe InstanceQueryProvider e implementar métodos para executar consultas em nome do cliente. Para obter mais informações, consulte Como: Desenvolver provedores de consulta de instância.
Provedores de controle de instâncias
Um provedor de controle de instâncias permite que um cliente emita comandos de controle nas instâncias de um repositório de instâncias e recupere comandos que precisam ser executados em uma instância. Quando você usa um cmdlet do Windows PowerShell para AppFabric para controlar (suspender, retomar, etc) uma instância no repositório de instâncias, o cmdlet cria um objeto do provedor de controle e chama um método no objeto para adicionar o comando a uma fila de comandos. O provedor de controle mantém a fila de comandos armazenada no repositório de instâncias. Um host genérico como o Serviço de Gerenciamento de Fluxo de Trabalho (WMS) cria um objeto do provedor de controle e chama um método nele para recuperar o comando armazenado na fila de comandos e executa o comando. O WMS notifica o provedor de controle sobre falhas ou êxitos na execução. Se a execução foi bem-sucedida, o provedor de controle remove o comando da fila; caso contrário, ele notifica o provedor de controle sobre a falha e o provedor toma a ação adequada.
Além de encaminhar um comando da fila de comandos para o WMS, um provedor de controle de instâncias encaminha um recipiente de propriedades que contém metadados sobre a instância na qual o comando foi emitido. Esse recipiente de propriedades contém o nome do site e o caminho do serviço virtual da instância. O provedor de controle obtém esses metadados do repositório de instâncias. O WMS usa esse metadados para obter acesso ao Ponto de Extremidade de Controle de Instâncias (ICE) exposto pela instância de serviço e chama métodos adequados no ponto de extremidade.
Todos os provedores de consulta implementam a mesma API e fornecem uma camada de abstração nos repositórios de instâncias diversas subjacentes. O AppFabric inclui um provedor de consulta de instâncias para o Repositório de Instâncias do Fluxo de Trabalho SQL, que permite que você emita comandos de controle nas instâncias armazenadas no banco de dados de persistência SQL Server. A implementação do provedor de controle de instâncias do Repositório de Instâncias do Fluxo de Trabalho SQL está em Microsoft.ApplicationServer.StoreManagement.dll. Para oferecer suporte à emissão de comandos nas instâncias armazenadas em um tipo diferente de repositório de instâncias, é necessário desenvolver um provedor de controle de instâncias nesse repositório.
Para criar um provedor de controle personalizado, é necessário criar uma classe que derive da classe InstanceControlProvider e implementar métodos para adicionar e recuperar comandos da fila de comandos, e a partir dela, em nome dos clientes. Para obter mais informações, consulte Como: Desenvolver provedores de controle de instância.
Provedor de controle de instâncias do Repositório de Instâncias do Fluxo de Trabalho SQL
AppFabric inclui um provedor de controle de instâncias para o Repositório de Instâncias do Fluxo de Trabalho SQL. O provedor de controle de instâncias mantém a fila de comandos em um banco de dados SQL Server. Quando você executa um cmdlet de controle no Repositório de Instâncias do Fluxo de Trabalho SQL, o provedor de controle de instâncias recebe o pedido e armazena as informações de comando na fila de comandos do banco de dados SQL Server. O WMS usa o provedor de controle de instâncias para recuperar o comando da fila de comandos, executa o comando no Repositório de Instâncias do Fluxo de Trabalho SQL e exclui o comando da fila de comandos se a execução do comando tiver êxito. A implementação do provedor de controle de instâncias do Repositório de Instâncias do Fluxo de Trabalho SQL está em Microsoft.ApplicationServer.StoreManagement.dll.
Os seguintes pontos se aplicam ao provedor de controle de instâncias do Repositório de Instâncias do Fluxo de Trabalho SQL:
O comando Excluir é imediatamente processado (de forma síncrona). Todos os outros comandos são enfileirados (adicionados) na fila de comandos antes que o provedor de controle identifique os comandos para que o WMS processe.
A fila de comandos é a fila "primeiro a entrar, primeiro a sair" (FIFO). O provedor de controle adiciona um novo comando ao final da fila e o lê no início. O provedor de controle retorna o comando mais antigo que não esteja bloqueado para o WMS.
Esse provedor de controle pode armazenar apenas um comando por instância na fila. Quando o provedor recebe um pedido de enfileiramento para um comando de uma instância na qual já existe um comando na fila, ele substitui o comando existente caso ele não esteja bloqueado. Se o comando estiver bloqueado ou no estado Pendente, o provedor de controle retornará um erro.
O provedor de controle coloca um bloqueio temporário depois de ler um comando da fila de comandos. Esse bloqueio expira após 65 segundos. Depois de receber uma notificação do WMS sobre a execução bem-sucedida do comando, o provedor remove o comando da fila de comandos.
O provedor de controle tentará emitir novamente um comando cinco vezes se sua execução falhar. A fila de comandos mantém um contador de tentativas de execução com falha. Se a execução do comando falhar cinco vezes, o provedor removerá o comando da fila de comandos.
O provedor de controle mantém um log de erro de execução de comandos no banco de dados. Esse log armazena metadados sobre comandos com falha e os motivos das falhas. O log contém nó máximo um comando com falha por instância. Cada entrada de log contém o tipo de comando, o ID da instância, o código de erro, a mensagem de erro, o horário da última tentativa de execução, o ID do computador no qual a execução do comando foi feita e o número de tentativas de execuções.
Uma entrada de log de uma instância é removida quando um novo comando é enfileirado na instância ou quando um usuário remove a instância do repositório de instâncias. Um usuário pode remover a instância usando um cmdlet (por exemplo: Remove-ASAppServiceInstance).
O provedor de controle remove os comandos das filas em lotes de 10.
Consulte também
Conceitos
Como: Desenvolver provedores de repositório de instância
Como: Desenvolver provedores de consulta de instância
Como: Desenvolver provedores de controle de instância
Como: configurar provedores de repositório de instância, consulta e controle
2012-03-05