Localizando pontos de extremidade
Os programas de servidor escutam pontos de extremidade para solicitações de cliente. A sintaxe da cadeia de caracteres do ponto de extremidade depende da sequência de protocolo que você usa. 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.
Há dois tipos de pontos de extremidade: 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 em tempo de execução especifica o ponto de extremidade.
Esta seção discute os pontos de extremidade e apresenta informações sobre como encontrá-los. Ele é organizado nos seguintes tópicos:
- Usando pontos de extremidade Well-Known
- Usando pontos de extremidade dinâmicos
- Exportando pontos de extremidade Well-Known para o banco de dados de mapa de ponto de extremidade
Observação
Os termos pontos de extremidade estáticos e pontos de extremidade conhecidos são equivalentes e usados de forma intercambiável.
É possível que seu aplicativo cliente use o mapa do ponto de extremidade para determinar se um programa de servidor está ou não em execução no momento. Seu cliente pode chamar RpcMgmtInqIfIds, RpcMgmtEpEltInqBegin e RpcMgmtEpEltInqDone para ver se o servidor registrou a interface específica necessária no mapa do ponto de extremidade.
Usando pontos de extremidade conhecidos
Pontos de extremidade conhecidos são pontos de extremidade pré-atribuídos 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 de extremidade conhecidos geralmente são atribuídos pela autoridade responsável pelo protocolo de transporte. Como os computadores host do servidor 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 conhecidos. Outra vantagem dos pontos de extremidade 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 cadeia de caracteres do ponto de extremidade pode aparecer no cabeçalho da interface do arquivo IDL como parte do atributo de interface [ ponto de extremidade].
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 de serviço de nome
Você pode gravar todas as informações necessárias para estabelecer uma associação em um aplicativo distribuído ao desenvolvê-la. O cliente pode especificar o ponto de extremidade conhecido diretamente em uma cadeia de caracteres, chamar RpcStringBindingCompose para criar uma cadeia de caracteres que contém todas as informações de associação e fornecer essa cadeia de caracteres para a função RpcBindingFromStringBinding para obter um identificador. O cliente e o servidor podem ser embutidos em código 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.
Seu aplicativo cliente também pode consultar um banco de dados de serviço de nome para obter informações conhecidas do ponto de extremidade.
Usando pontos de extremidade dinâmicos
O número de pontos de extremidade para um servidor específico e uma sequência de protocolo específica geralmente são limitados. 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 pontos de extremidade dinamicamente, conforme necessário. Como o número de UUIDs de interface possíveis é praticamente ilimitado, usar a interface UUID para direcionar a chamada oferece mais espaço para expansão e mais flexibilidade.
Por padrão, as funções de biblioteca de tempo de execução RPC pesquisam informações de ponto de extremidade quando consultam um banco de dados de serviço de nome. Se o ponto de extremidade for dinâmico, o banco de dados de serviço de nome não conterá informações de ponto de extremidade. No entanto, a consulta dará ao programa cliente o nome de um servidor. Em seguida, ele pode pesquisar o mapa do ponto de extremidade do servidor.
Se o cliente precisar fazer uma chamada de procedimento remoto usando um ponto de extremidade dinâmico, o método preferencial será fazer a chamada em um identificador de associação parcialmente associado. 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 de cache avançados no tempo de execução do RPC.
Se for necessário um controle mais específico sobre a seleção de ponto de extremidade, os clientes poderão pesquisar no mapa do ponto de extremidade uma entrada por vez chamando as funções RpcMgmtEpEltInqBegin, RpcMgmtEpEltInqNext e RpcMgmtEpEltInqDone .
Exportando pontos de extremidade conhecidos para o banco de dados de mapa de ponto de extremidade
É possível misturar as duas abordagens para localizar pontos de extremidade, especialmente quando um sistema distribuído está fazendo a transição de um modelo de ponto de extremidade conhecido para um modelo de ponto de extremidade dinâmico. Nessas 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 do ponto de extremidade. Essa abordagem permite que clientes que usam pontos de extremidade conhecidos e clientes que usam um ponto de extremidade dinâmico se conectem. Depois que todos os servidores são atualizados, uma nova versão do cliente pode ser implantada que usa apenas pontos de extremidade dinâmicos. Depois que todos os clientes são atualizados, uma versão final do servidor pode 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.