Partilhar via


Localizando pontos de extremidade

Os programas de servidor escutam os endpoints para solicitações do cliente. A sintaxe da cadeia de caracteres do ponto de extremidade depende da sequência de protocolo usada. Por exemplo, o ponto de extremidade para TCP/IP é um número de porta e a sintaxe do ponto de extremidade para pipes nomeados é um nome de pipe válido.

Existem dois tipos de pontos finais: conhecidos e dinâmicos. Sua escolha de qual tipo de ponto de extremidade seu programa usa determina se o aplicativo distribuído ou a biblioteca de tempo de execução especifica o ponto de extremidade.

Esta seção discute os pontos finais e apresenta informações sobre como encontrá-los. Está organizado nos seguintes tópicos:

Observação

Os termos pontos de extremidade estáticos e pontos de extremidade bem conhecidos são equivalentes e usados de forma intercambiável.

 

É possível que seu aplicativo cliente use o mapa de ponto de extremidade para determinar se um programa de servidor está ou não em execução no momento. O seu cliente pode chamar RpcMgmtInqIfIds, RpcMgmtEpEltInqBegine RpcMgmtEpEltInqDone para verificar se o servidor registou a interface específica necessária no mapa de pontos finais.

Utilizando pontos finais conhecidos

Pontos finais conhecidos são pontos finais pré-definidos que o programa de servidor usa sempre que é executado. Como o servidor sempre escuta esse ponto de extremidade específico, o cliente sempre tenta se conectar a ele. Os pontos finais bem conhecidos são geralmente atribuídos pela autoridade responsável pelo protocolo de transporte. Como os servidores têm um número finito de pontos de extremidade disponíveis, os desenvolvedores de aplicativos são fortemente desencorajados a usar pontos de extremidade bem conhecidos. Outra vantagem dos endpoints dinâmicos é que eles simplificam o gerenciamento e a manutenção de longo prazo do sistema.

Um aplicativo distribuído pode especificar um ponto de extremidade conhecido em uma cadeia de caracteres e passar essa cadeia de caracteres como um parâmetro para a função RpcServerUseProtseqEp. Como alternativa, a string do ponto de acesso pode aparecer no cabeçalho da interface do arquivo IDL como parte do atributo de interface [ endpoint].

Você pode usar duas abordagens para implementar o ponto de extremidade conhecido:

  • Especificar todas as informações em uma associação de cadeia de caracteres
  • Armazenar o ponto de extremidade conhecido no banco de dados do serviço de nomes

Você pode escrever todas as informações necessárias para estabelecer uma ligação em um aplicativo distribuído ao desenvolvê-lo. O cliente pode especificar o ponto de extremidade conhecido diretamente numa string, chamar RpcStringBindingCompose para criar uma string que contenha todas as informações de ligação e fornecer essa string para a função RpcBindingFromStringBinding para obter um identificador. O cliente e o servidor podem ser codificados para usar um ponto de extremidade conhecido ou gravados para que as informações do ponto de extremidade venham da linha de comando, de um arquivo de dados, de um arquivo de configuração ou do arquivo IDL.

A sua aplicação cliente também pode consultar uma base de dados de serviço de nomes para obter informações de endpoint conhecidas.

Usando pontos de extremidade dinâmicos

O número de pontos de extremidade para um determinado servidor e uma sequência específica de protocolo é geralmente limitado. Por exemplo, quando você usa a sequência de protocolo ncacn_ip_tcp, indicando que a comunicação de rede RPC ocorre usando TCP/IP, apenas um número limitado de portas está disponível (a maioria dos sistemas tem apenas o intervalo de 1025 a 5000 aberto). As bibliotecas de tempo de execução RPC permitem atribuir endereços finais dinamicamente, conforme necessário. Como o número de UUIDs de interface possíveis é praticamente ilimitado, usar o UUID de interface para direcionar a chamada oferece mais espaço para expansão e mais flexibilidade.

Por padrão, as funções da biblioteca de tempo de execução RPC procuram informações de ponto de extremidade quando consultam um banco de dados de serviço de nomes. Se o ponto de extremidade for dinâmico, o banco de dados do serviço de nomes não conterá informações do ponto de extremidade. No entanto, a consulta dará ao seu programa cliente o nome de um servidor. Em seguida, ele pode pesquisar o mapa de pontos finais do servidor.

Se o cliente precisar fazer uma chamada de procedimento remoto usando um ponto de extremidade dinâmico, o método preferido é fazer a chamada em um identificador de vinculação parcialmente vinculado. O tempo de execução do RPC resolve o ponto de extremidade de forma transparente. Esse método é superior ao uso da função RpcEpResolveBinding, pois permite mecanismos avançados de cache no tempo de execução RPC.

Se for necessário um controle mais específico sobre a seleção de pontos finais, os clientes poderão pesquisar o mapa de pontos finais uma entrada de cada vez, chamando as funções RpcMgmtEpEltInqBegin, RpcMgmtEpEltInqNext, e RpcMgmtEpEltInqDone.

Exportando pontos de extremidade conhecidos para o banco de dados de mapas de pontos finais

É possível combinar as duas abordagens para encontrar pontos de extremidade, especialmente quando um sistema distribuído está em transição de um modelo de ponto final bem conhecido para um modelo de ponto final dinâmico. Em tais transições, uma versão intermediária do servidor usará um ponto de extremidade conhecido, mas também registrará o ponto de extremidade conhecido com o banco de dados de mapa de ponto final. Essa abordagem permite que clientes que usam um ponto de extremidade conhecido e clientes que usam um ponto de extremidade dinâmico se conectem. Assim que todos os servidores forem atualizados, uma nova versão do cliente poderá ser implementada usando apenas pontos de extremidade dinâmicos. Depois que todos os clientes forem atualizados, uma versão final do servidor poderá parar de usar pontos de extremidade conhecidos e começar a usar apenas pontos de extremidade dinâmicos.

Essa abordagem permite um caminho de transição para aplicativos que começaram com um ponto de extremidade conhecido, mas desejam migrar para um ponto de extremidade dinâmico sem exigir uma atualização simultânea de todos os servidores e clientes.