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 |
---|---|
|
O RPC é associado com êxito ao servidor e chamadas remotas podem ser feitas. |
|
Um recurso obsoleto do RPC foi solicitado para essa operação de associação. |
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:
- RpcBindingFree
- RpcBindingReset
- RpcBindingSetAuthInfo e RpcBindingSetAuthInfoEx
- RpcBindingSetObject
- RpcBindingSetOption
- RpcMgmtSetComTimeout
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 |