Função RpcBindingBind (rpcasync.h)

A função RpcBindingBind entra em contato com um servidor RPC e se associa a ele.

Sintaxe

RPC_STATUS RpcBindingBind(
  [in, optional] PRPC_ASYNC_STATE   pAsync,
  [in]           RPC_BINDING_HANDLE Binding,
  [in]           RPC_IF_HANDLE      IfSpec
);

Parâmetros

[in, optional] pAsync

Ponteiro para a estrutura RPC_ASYNC_STATE que contém informações de chamada assíncronas. Essas informações de estado contêm o método de conclusão usado para sinalizar quando a operação de associação for concluída.

[in] Binding

RPC_BINDING_HANDLE estrutura que contém o identificador de associação criado com uma chamada anterior para RpcBindingCreate.

[in] IfSpec

RPC_IF_HANDLE valor que especifica a interface na qual serão feitas chamadas para esse identificador de associação.

Retornar valor

Essa função retorna RPC_S_OK com êxito; caso contrário, um código de erro RPC_S_* será retornado. Para obter informações sobre esses códigos de erro, consulte RPC Return Values.

Código de retorno Descrição
RPC_S_OK
O RPC é associado com êxito ao servidor e chamadas remotas podem ser feitas.
RPC_S_CANNOT_SUPPORT
Um recurso obsoleto do RPC foi solicitado para essa operação de associação.
 
Nota Para obter uma lista de códigos de erro válidos, consulte RPC Return Values.
 

Comentários

RpcBindingBind entra em contato com o servidor RPC e se associa a ele usando o identificador de associação retornado por uma chamada anterior para RpcBindingCreate. Os identificadores de associação estabelecidos usando esse método são chamados de identificadores de associação "rápidos".

Se o valor do parâmetro pAsync não for NULL, a associação será assíncrona e as chamadas para RpcAsyncCancelCall e RpcAsyncGetCallStatus poderão ser feitas no estado assíncrono fornecido. O método de conclusão especificado no wis de informações de estado assíncrono usado para sinalizar ao chamador que a associação está concluída. Após a notificação de conclusão, as chamadas podem ser feitas usando o identificador de associação recém-associado.

O método bind não determina quais chamadas podem ser feitas usando o identificador de associação – se a associação for síncrona, chamadas assíncronas ainda poderão ser feitas no identificador de associação e vice-versa. O método bind determina como a notificação de uma associação bem-sucedida é sinalizada, especificamente no caso de associações assíncronas.

Como essa API troca mensagens com o servidor RPC, as operações de associação podem levar muito tempo com base em vários fatores independentes, incluindo tráfego de rede e bloqueio de servidor. Se a associação for síncrona, a operação de associação poderá ser bloqueada se o servidor estiver bloqueado.

Após a conclusão da associação, a semântica de chamadas feitas no identificador de associação é a mesma que as chamadas feitas em qualquer outro tipo de identificador de associação, mas com quatro diferenças notáveis, listadas abaixo:

  • Todas as chamadas nesse identificador de associação devem ser feitas na interface especificada em IfSpec. O identificador de associação está vinculado exclusivamente a essa interface. A interface em si pode ser descarregada antes que o identificador de associação seja destruído, mas informações abrangentes sobre a interface são armazenadas em cache no identificador de associação e, se uma chamada for feita no mesmo identificador de associação para uma interface diferente, os resultados serão indefinidos.
  • Os retornos de chamada RPC não são permitidos em um identificador de associação. Se o servidor RPC tentar fazer um retorno de chamada usando um método com o atributo [callback], a chamada será rejeitada com o erro RPC_S_CANNOT_SUPPORT status código.
  • Com identificadores de associação clássicos, o RPC tentará reconectar-se transparentemente com o servidor se a conexão for descartada. Para identificadores de associação rápida, o RPC não tentará reconectar-se transparentemente ao servidor; Em vez disso, retornará um dos seguintes erros: RPC_S_SERVER_UNAVAILABLE, RPC_S_CALL_FAILED e RPC_C_CALL_FAILED_DNE. Se a conexão for descartada devido a credenciais rejeitadas, RPC_S_ACCESS_DENIED será retornado; e se o servidor encontrar um erro transitório devido à falta de memória, RPC_S_OUT_OF_MEMORY será retornado. Quaisquer outros erros de conectividade são o resultado de erros de marshaling ou de nãomarsalização retornados pelas rotinas do servidor. No caso de uma conexão perdida, o chamado deve ser desvinculado chamando RpcBindingUnbind e, em seguida, reassociado com outra chamada para RpcBindingBind.

Se a chamada para RpcBindingBind falhar, o identificador de associação não será associado ao servidor e o chamador poderá tentar associar novamente com outra chamada à mesma API ou liberar o identificador de associação. Como uma operação de associação com falha não move o identificador de associação para o estado associado, RpcBindingUnbind não deve ser chamado nele.

Determinadas funções não devem ser chamadas até que a operação de associação tenha sinalizado a conclusão, especificamente:

Nota Atualmente, essa função dá suporte apenas à sequência de protocolo ncalrpc .
 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista, Windows XP com SP2 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008, Windows Server 2003 com SP1 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho rpcasync.h (inclua Rpc.h)
Biblioteca Rpcrt4.lib
DLL Rpcrt4.dll

Confira também

RpcBindingCreate

RpcBindingUnbind