Función RpcBindingBind (rpcasync.h)
La función RpcBindingBind se pone en contacto con un servidor RPC y se enlaza a él.
Sintaxis
RPC_STATUS RpcBindingBind(
[in, optional] PRPC_ASYNC_STATE pAsync,
[in] RPC_BINDING_HANDLE Binding,
[in] RPC_IF_HANDLE IfSpec
);
Parámetros
[in, optional] pAsync
Puntero a la estructura RPC_ASYNC_STATE que contiene información de llamada asincrónica. Esta información de estado contiene el método de finalización que se usa para indicar cuándo se completa la operación de enlace.
[in] Binding
RPC_BINDING_HANDLE estructura que contiene el identificador de enlace creado con una llamada anterior a RpcBindingCreate.
[in] IfSpec
RPC_IF_HANDLE valor que especifica la interfaz en la que se realizarán llamadas a este identificador de enlace.
Valor devuelto
Esta función devuelve RPC_S_OK si se realiza correctamente; De lo contrario, se devuelve un código de error RPC_S_*. Para obtener información sobre estos códigos de error, vea Valores devueltos de RPC.
Código devuelto | Descripción |
---|---|
|
El RPC se enlaza correctamente al servidor y se pueden realizar llamadas remotas. |
|
Se solicitó una característica obsoleta de RPC para esta operación de enlace. |
Comentarios
RpcBindingBind se pone en contacto con el servidor RPC y se enlaza a él mediante el identificador de enlace devuelto por una llamada anterior a RpcBindingCreate. Los identificadores de enlace establecidos mediante este método se conocen como identificadores de enlace "rápidos".
Si el valor del parámetro pAsync no es NULL, el enlace será asincrónico y las llamadas a RpcAsyncCancelCall y RpcAsyncGetCallStatus se pueden realizar en el estado asincrónico proporcionado. Método de finalización especificado en la información de estado asincrónico que se usa para indicar al autor de la llamada que el enlace está completo. Tras la notificación de finalización, se pueden realizar llamadas mediante el identificador de enlace recién enlazado.
El método bind no determina qué llamadas se pueden realizar mediante el identificador de enlace; si el enlace es sincrónico, las llamadas asincrónicas todavía se pueden realizar en el identificador de enlace y viceversa. El método de enlace determina cómo se señala la notificación de un enlace correcto, en concreto en el caso de los enlaces asincrónicos.
Dado que esta API intercambia mensajes con el servidor RPC, las operaciones de enlace pueden tardar mucho tiempo en función de varios factores independientes, incluido el tráfico de red y el bloqueo del servidor. Si el enlace es sincrónico, la operación de enlace puede bloquearse si el servidor está bloqueado.
Una vez completado el enlace, la semántica de las llamadas realizadas en el identificador de enlace es la misma que las llamadas realizadas en cualquier otro tipo de identificador de enlace, pero con cuatro diferencias notables, que se enumeran a continuación:
- Todas las llamadas a este identificador de enlace se deben realizar en la interfaz especificada en IfSpec. El identificador de enlace está vinculado de forma única a esta interfaz. La propia interfaz se puede descargar antes de que se destruya el identificador de enlace, pero se almacena en caché información extensa sobre la interfaz en el identificador de enlace y, si se realiza una llamada en el mismo identificador de enlace para una interfaz diferente, los resultados no están definidos.
- No se permiten devoluciones de llamada RPC en un identificador de enlace. Si el servidor RPC intenta realizar una devolución de llamada mediante un método con el atributo [callback], la llamada se rechaza con el código de estado de error RPC_S_CANNOT_SUPPORT.
- Con los identificadores de enlace clásicos, RPC intentará volver a conectarse de forma transparente con el servidor si se quita la conexión. Para los identificadores de enlace rápidos, RPC no intentará volver a conectarse de forma transparente al servidor; en su lugar, devolverá uno de los siguientes errores: RPC_S_SERVER_UNAVAILABLE, RPC_S_CALL_FAILED y RPC_C_CALL_FAILED_DNE. Si se quita la conexión debido a credenciales rechazadas, se devuelve RPC_S_ACCESS_DENIED; y si el servidor encuentra un error transitorio debido a una falta de memoria, se devuelve RPC_S_OUT_OF_MEMORY. Cualquier otro error de conectividad es el resultado de serializar o desacoplar errores devueltos por rutinas de servidor. En el caso de una conexión perdida, el llamado debe desenlazarse llamando a RpcBindingUnbind y, a continuación, volver a enlazar con otra llamada a RpcBindingBind.
Si se produce un error en la llamada a RpcBindingBind , el identificador de enlace no está enlazado al servidor y el autor de la llamada puede intentar enlazar de nuevo con otra llamada a la misma API o puede liberar el identificador de enlace. Dado que una operación de enlace con errores no mueve el identificador de enlace al estado enlazado, no se debe llamar a RpcBindingUnbind en él.
No se debe llamar a determinadas funciones hasta que la operación de enlace haya señalado la finalización, en concreto:
- RpcBindingFree
- RpcBindingReset
- RpcBindingSetAuthInfo y RpcBindingSetAuthInfoEx
- RpcBindingSetObject
- RpcBindingSetOption
- RpcMgmtSetComTimeout
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista, Windows XP con SP2 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2008, Windows Server 2003 con SP1 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | rpcasync.h (include Rpc.h) |
Library | Rpcrt4.lib |
Archivo DLL | Rpcrt4.dll |