Sobre a distribuição de pares

A API de Distribuição por Pares, que dá suporte ao recurso Cache de Branch no Windows 7, Windows Server 2008 R2, Windows 8 e Windows Server 2012 oferece um conjunto de APIs de plataforma que podem aumentar a capacidade de resposta de rede de aplicativos centralizados quando acessados de escritórios remotos e auxiliar na redução da utilização geral da WAN (rede de ampla área) sem interferir nas tecnologias de segurança de rede.

O sistema distribuição de pares oferece um conjunto de APIs de plataforma utilizadas pelos editores que fornecem conteúdo digital e consumidores que o solicitam. Para diferenciar facilmente essas funções, pode ser mais fácil pensar no editor em uma função de servidor e no consumidor em uma função de cliente. Além disso, é importante lembrar que, além dessas funções conceituais, o serviço distribuição de pares é um verdadeiro sistema par, conforme indicado pela capacidade de qualquer nó de Distribuição Par publicar e consumir conteúdo digital. As APIs da plataforma de distribuição par são expostas a editores e consumidores por uma biblioteca de importação do Win32 (PeerDist.Lib).

O ciclo de vida do conteúdo fornecido por um editor e recuperado por um consumidor com o serviço distribuição de pares é composto pelas seguintes operações:

Descrição
Publicação de conteúdo A publicação é feita para produzir uma descrição do conteúdo denominado Informações de Conteúdo ou Informações de Conteúdo para abreviar. Essas Informações de Conteúdo podem ser usadas por uma instância do serviço distribuição de pares para autenticar e recompilar o conteúdo. Quando o conteúdo é publicado por um aplicativo no serviço distribuição de pares, que é conceitualmente uma operação do lado do servidor, esse conteúdo se torna associado à Identidade do Editor, que se baseia no SID do usuário associado ao token de acesso de thread. Essa associação é feita para limitar o acesso ao conteúdo por entidades não autorizadas. No entanto, é importante observar que o acesso às informações de conteúdo é equivalente ao acesso ao conteúdo em si, pois as informações de conteúdo podem ser usadas para obter o conteúdo de pares ou de um cache hospedado.
Há uma nova versão da estrutura de dados de informações de conteúdo no Windows 8; no entanto, ainda há suporte para a versão anterior. Para interoperar com clientes do Windows 7, um administrador pode configurar o serviço distribuição de pares para usar a versão anterior da estrutura de dados de informações de conteúdo.
Recuperação de conteúdo Para que um consumidor recupere o conteúdo do serviço distribuição de pares, o acesso deve ser fornecido às Informações de Conteúdo publicadas associadas a esse conteúdo. O serviço distribuição de pares usado para publicar o conteúdo pode fornecer as Informações de Conteúdo associadas. Depois que o consumidor tiver as Informações de Conteúdo, outras APIs de Distribuição de Pares poderão ser usadas para solicitar conteúdo do serviço distribuição por pares. O serviço distribuição de pares tentará recuperar o conteúdo da rede local. Se o conteúdo não estiver disponível, o aplicativo cliente será responsável por recuperar o conteúdo do servidor de origem.
Remoção de publicação Para aplicativos que publicaram conteúdo no serviço distribuição de pares, a função PeerDistServerUnpublish foi fornecida para permitir que o conteúdo seja não publicado. Depois que o conteúdo for não publicado, o serviço de Distribuição de Pares local não fornecerá mais as informações de conteúdo associadas a esse conteúdo.

Conclusões assíncronas

A API de Distribuição de Pares dá suporte a um modelo de API assíncrona e, como resultado, as APIs de Distribuição por Pares permitem o uso de Portas ou Eventos de Conclusão de E/S como os mecanismos de sinalização para processar conclusões assíncronas da operação de Distribuição por Pares. Para qualquer mecanismo, a Distribuição de Pares usa uma estrutura OVERLAPPED . Em geral, a Distribuição de Pares assume a propriedade de uma estrutura OVERLAPPED e quaisquer parâmetros out que o Cliente passa para funções de API assíncronas. O Cliente não deve acessar esses recursos até que a função assíncrona específica seja concluída. Assim que as funções assíncronas forem concluídas, o serviço distribuição de pares não exigirá mais acesso a esses recursos e eles poderão ser reutilizados conforme o aplicativo de chamada achar adequado.

Não haverá nenhuma conclusão assíncrona se a função retornar qualquer código de erro diferente de ERROR_IO_PENDING. O retorno de um valor diferente de ERROR_IO_PENDING significa que a chamada falhou de forma síncrona. Se a API de Distribuição de Pares retornar ERROR_IO_PENDING, o chamador deverá aguardar a conclusão assíncrona.

O código de erro da conclusão assíncrona pode ser recuperado de uma das duas maneiras:

Conclusão baseada na porta de conclusão de E/S

O usuário invoca o mecanismo de porta de conclusão de E/S fornecendo um identificador de porta de conclusão e uma chave de conclusão para as seguintes funções de API:

PeerDistRegisterForStatusChangeNotification
PeerDistServerPublishStream
PeerDistServerOpenContentInformation
PeerDistClientOpenContent

O Usuário cria uma porta de conclusão chamando CreateIoCompletionPort. Esse identificador de porta de conclusão pode ser usado simultaneamente para outras operações de E/S assíncronas, bem como operações específicas de Distribuição de Pares.

O chamador deve usar a função GetQueuedCompletionStatus para gerenciar a conclusão assíncrona. Se a operação assíncrona falhar, a função GetQueuedCompletionStatus retornará FALSE e GetLastError retornará o código de erro apropriado. O chamador deve ignorar todos os campos da estrutura OVERLAPPED se o código de erro não for ERROR_SUCCESS. A operação assíncrona terá êxito se a função GetQueuedCompletionStatus retornar TRUE.

Para obter mais informações, consulte Portas de conclusão de E/S.

Conclusão baseada em evento

Se o chamador definir um identificador de evento válido para o campo hEvent da estrutura OVERLAPPED , a Distribuição de Pares o usará para sinalizar que a operação de E/S assíncrona associada foi concluída.

Um chamador de thread pode gerenciar operações sobrepostas especificando um identificador para o objeto de evento de redefinição manual da estrutura OVERLAPPED em uma das funções de espera. Depois que o Evento for sinalizado, o chamador deverá chamar PeerGetOverlappedResult passando a estrutura OVERLAPPED apropriada. PeerGetOverlappedResult retornará FALSE e o chamador deverá chamar GetLastError para recuperar o código de erro. O chamador deve ignorar todos os campos da estrutura OVERLAPPED se o código de erro não for ERROR_SUCCESS. A operação assíncrona terá êxito se a função PeerGetOverlappedResult retornar TRUE.

Se o chamador fornecer uma porta de conclusão junto com um evento, o evento será usado como o mecanismo de conclusão.

Windows 7: Use a função GetOverlappedResult em vez de PeerGetOverlappedResult.

Referência da API de Distribuição de Pares