Partilhar via


Especificando sequências de protocolo

Os aplicativos de servidor devem selecionar uma ou mais sequências de protocolo para usar ao se comunicar com o cliente pela rede. A escolha das sequências de protocolo depende da rede. Consulte Interpretando informações de vinculação e Selecionando uma sequência de protocolo.

Seu programa de servidor pode permitir que os clientes se conectem usando qualquer sequência de protocolo que a rede suporta. Para fazer isso, invoque RpcServerUseAllProtseqs e passe RPC_C_PROTSEQ_MAX_REQS_DEFAULT como o primeiro parâmetro. No entanto, essa não é a abordagem recomendada. Em vez disso, usar ncalrpc para chamadas locais e ncacn_ip_tcp ou ncacn_http para chamadas remotas geralmente é suficiente. Redes heterogêneas são incomuns, e praticamente todas as redes suportam TCP/IP.

Se você quiser que seu cliente restrinja a alocação de portas para pontos de extremidade dinâmicos a um intervalo de portas específico, chame RpcServerUseAllProtseqsEx em vez disso. Esta função é específica do Microsoft RPC e é extremamente útil para chamadas de procedimento remoto que passam por um firewall. Ele usa um parâmetro extra para passar sinalizadores de controle de alocação de porta para a função. Consulte Configurando o Registro para Alocações de Porta e Vinculação Seletiva.

Você pode especificar sequências de protocolo e informações de ponto de extremidade em seu arquivo MIDL ao desenvolver as interfaces do servidor. Se você fizer isso, seu servidor deve usar RpcServerUseAllProtseqsIf para registrar todas as sequências de protocolo e informações de ponto final associadas fornecidas no arquivo IDL. Além disso, há uma função correspondente RpcServerUseAllProtseqsIfEx que também permite que o servidor passe sinalizadores de controlo de alocação de porta.

Se você deseja configurar seus programas cliente e servidor para se comunicar com uma sequência de protocolo especificada, o aplicativo de servidor deve chamar RpcServerUseProtseq. Para obter uma lista completa das sequências de protocolo RPC da Microsoft, consulte Constantes de sequência de protocolo.

O Microsoft RPC também fornece RpcServerUseProtseqEx para permitir que os aplicativos selecionem sequências de protocolo específicas e controlem a alocação dinâmica de portas.

Além de protocolos orientados a conexão, o Microsoft RPC também suporta protocolos de datagrama (sem conexão). Recomendam-se protocolos orientados para a conexão; Os protocolos de datagrama têm conjuntos de recursos diferentes dos protocolos orientados à conexão e só devem ser usados se um desenvolvedor de sistema distribuído exigir um recurso disponível apenas em protocolos de datagrama. Alguns dos recursos disponíveis ao usar protocolos de datagrama são:

  • Os datagramas suportam os protocolos de transporte sem conexão UDP e IPX.
  • Como não é necessário estabelecer e manter uma conexão, o protocolo RPC de datagrama requer menos sobrecarga de recursos.
  • Os datagramas permitem uma ligação mais rápida.
  • Tal como acontece com o RPC orientado para conexão, as chamadas RPC de datagrama são, por padrão, não idempotentes. Isso significa que é garantido que a chamada não será executada mais de uma vez. No entanto, uma função pode ser marcada como idempotente no arquivo IDL dizendo à RPC que é inofensivo executar a função mais de uma vez em resposta a uma única solicitação do cliente. Isso permite que o tempo de execução mantenha menos estado no servidor. Observe que uma chamada idempotente só seria repetida em circunstâncias raras numa rede instável.
  • O Datagram RPC suporta o atributo IDL de broadcast . A difusão permite que um cliente emita mensagens para vários servidores ao mesmo tempo. Isso permite que o cliente localize um dos vários servidores disponíveis na rede ou controle vários servidores simultaneamente. Observe que a transmissão de datagrama é válida apenas dentro do link local e geralmente não cruza roteadores. As chamadas de difusão são implicitamente idempotentes. Se a chamada contiver parâmetros [out], somente a primeira resposta do servidor será retornada. Quando um servidor responder, todas as RPCs futuras sobre esse identificador de vinculação serão enviadas apenas para esse servidor, incluindo chamadas com o atributo broadcast. Para enviar outra transmissão, crie um novo identificador de vinculação ou chame RpcBindingReset no identificador existente.
  • O Datagram RPC suporta o atributo IDL talvez. Isso permite que o cliente envie uma chamada para o servidor sem esperar por uma resposta ou confirmação. A chamada não pode conter parâmetros [out]. As chamadas que usam o [talvez] são implicitamente idempotentes.