Especificando sequências de protocolo

Os aplicativos de servidor devem selecionar uma ou mais sequências de protocolo a serem usadas ao se comunicar com o cliente pela rede. A escolha de sequências de protocolo depende da rede. Consulte Interpretando informações de associaçã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 compatível com a rede. 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 dão suporte a TCP/IP.

Se você quiser que seu cliente restrinja a alocação de porta para pontos de extremidade dinâmicos para um intervalo de portas específico, chame RpcServerUseAllProtseqsEx . Essa 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 associaçã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, o servidor deverá usar RpcServerUseAllProtseqsIf para registrar todas as sequências de protocolo e as informações de ponto de extremidade associadas fornecidas no arquivo IDL. Além disso, há uma função RpcServerUseAllProtseqsIfEx correspondente que também permite que o servidor passe sinalizadores de controle de alocação de porta.

Se você quiser configurar seus programas cliente e servidor para se comunicar com uma sequência de protocolo especificada, o aplicativo de servidor deverá chamar RpcServerUseProtseq. Para obter uma lista completa de 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 de porta dinâmica.

Além dos protocolos orientados à conexão, o Microsoft RPC também dá suporte a protocolos de datagrama (sem conexão). Os protocolos orientados à conexão são recomendados; 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 somente em protocolos de datagrama. Alguns dos recursos disponíveis ao usar protocolos de datagrama são:

  • Os datagramas dão suporte aos protocolos de transporte sem conexão UDP e IPX.
  • Como não é necessário estabelecer e manter uma conexão, o protocolo RPC do datagrama requer menos sobrecarga de recursos.
  • Os datagramas permitem uma associação mais rápida.
  • Assim como acontece com o RPC orientado à conexão, as chamadas RPC de datagrama são, por padrão , nãoidempotentes. Isso significa que a chamada tem a garantia de não ser executada mais de uma vez. No entanto, uma função pode ser marcada como idempotente no arquivo IDL informando ao RPC que é inofensivo executar a função mais de uma vez em resposta a uma única solicitação de cliente. Isso permite que o tempo de execução mantenha menos estado no servidor. Observe que uma chamada idempotente seria executada novamente apenas em circunstâncias raras em uma rede instável.
  • O RPC de datagrama dá suporte ao atributo IDL de difusão . 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 difusão de datagrama é válida somente 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. Depois que um servidor responder, todos os RPCs futuros sobre esse identificador de associação serão enviados somente para esse servidor, incluindo chamadas com o atributo de difusão. Para enviar outra difusão, crie um novo identificador de associação ou chame RpcBindingReset no identificador existente.
  • O RPC de datagrama dá suporte ao atributo talvez IDL. Isso permite que o cliente envie uma chamada para o servidor sem aguardar uma resposta ou confirmação. A chamada não pode conter parâmetros [out]. As chamadas que usam as chamadas [talvez] são implicitamente idempotentes.