Como disponibilizar o servidor na rede

Antes que um aplicativo de servidor possa aceitar chamadas de procedimento remoto, ele deve estar disponível na rede. Para fazer isso, o servidor indica ao tempo de execução de RPC que está disposto a aceitar chamadas em uma ou mais sequências de protocolo. Escolher as sequências de protocolo que um aplicativo de servidor permite é uma decisão importante. As sequências de protocolos diferentes têm capacidades muito diferentes. Os servidores que esperam que as chamadas sejam recebidas localmente devem usar ncalrpc. Os servidores que aceitam chamadas remotas devem usar ncacn_ip_tcp. Os servidores não deveriam verificar se a sequência de protocolo na qual eles recebem chamadas é a sequência de protocolo na qual eles esperam receber chamadas. Para obter mais informações, confira Tenha cuidado com outros pontos de extremidade de RPC em execução no mesmo processo.

O exemplo de código a seguir usa ncacn_ip_tcp.

A maioria dos programas de servidor usa todas as sequências de protocolo disponíveis na rede. Para fazer isso, eles invocam a função RpcServerUseProtseq, conforme mostrado no seguinte fragmento de código:

RPC_STATUS status;
status = RpcServerUseProtseq(
    L"ncacn_ip_tcp",
    RPC_C_PROTSEQ_MAX_REQS_DEFAULT,    // Protseq-dependent parameter
    NULL);                             // Always specify NULL here.

O primeiro parâmetro para a função RpcServerUseProtseq é a sequência de protocolo. O segundo parâmetro depende da sequência do protocolo. Conforme ilustrado no exemplo de código, a maioria dos programas de servidor define esse parâmetro como RPC_C_PROTSEQ_MAX_REQS_DEFAULT. Esse valor define a biblioteca de RPC para usar o valor padrão. O terceiro parâmetro é um descritor de segurança e não deve ser usado em aplicativos. Para obter mais informações, confira Segurança (RPC).

Você também pode chamar as funções RpcServerUseAllProtseqs, RpcServerUseProtseqEx, RpcServerUseProtseqEp ou RpcServerUseProtseqEpEx.

Depois que um aplicativo de servidor seleciona pelo menos uma sequência de protocolo, os servidores que usam pontos de extremidade dinâmicos devem criar informações de associação para cada sequência de protocolo usado. O servidor armazena as informações de vinculação em um vetor de vinculação que pode ser exportado para o serviço de mapeador de ponto de extremidade.

Use a função RpcServerInqBindings para obter um vetor de vinculação para o aplicativo de servidor, conforme mostrado no exemplo a seguir:

RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
 
status = RpcServerInqBindings(&rpcBindingVector);

O único parâmetro passado para a função RpcServerInqBindings é um ponteiro para uma estrutura RPC_BINDING_VECTOR. A biblioteca de tempo de execução de RPC aloca dinamicamente uma matriz de vetores de vinculação e armazena o endereço da matriz nessa variável de parâmetro (neste caso, rpcBindingVector). Depois que o aplicativo de servidor terminar de usar esse vetor de vinculação (por exemplo, depois de passá-lo para as funções apropriadas), o aplicativo de servidor será responsável por liberar esse vetor de vinculação usando a função RpcBindingVectorFree.