Identificadores de enlace implícitos
Los identificadores de enlace implícitos permiten a la aplicación seleccionar un servidor específico para ejecutar sus llamadas a procedimientos remotos. Para obtener más información, consulte Enlace del lado cliente. También permiten que el programa cliente o servidor use enlaces autenticados. Es decir, el cliente puede especificar información de autenticación en un identificador de enlace implícito. La biblioteca en tiempo de ejecución rpc usa la información de autenticación para establecer una sesión RPC autenticada entre el cliente y el servidor. Para obtener más información, consulte Seguridad.
Nota
Los identificadores de enlace implícitos no son seguros para subprocesos. Por lo tanto, las aplicaciones multiproceso deben evitar el uso de identificadores de enlace implícitos.
Cuando la aplicación usa enlaces implícitos, el cliente debe establecer la información de enlace para que pueda crear el enlace. Una vez que el cliente crea un enlace implícito, no es necesario pasar ningún identificador de enlace a procedimientos remotos. La biblioteca RPC controla el resto de la mecánica de la sesión de comunicación.
El cliente almacena la información de enlace de un identificador implícito en una variable global. Cuando el compilador MIDL genera el código auxiliar de cliente y el archivo de encabezado a partir de la especificación de interfaz del archivo MIDL, también genera código para una variable de identificador de enlace global. El programa cliente inicializa el identificador y, a continuación, no hace referencia a él de nuevo hasta que destruye el enlace.
Para crear un identificador implícito, especifique el atributo [implicit_handle] en el ACF para una interfaz de la siguiente manera:
/* ACF file (complete) */
[
implicit_handle(handle_t hHello)
]
interface hello
{
}
El tipo handle_t , que se usa en el ejemplo anterior, es un tipo de datos MIDL que se usa para definir identificadores de enlace.
Después de crear el identificador implícito, la aplicación debe usarla como parámetro para las funciones de biblioteca en tiempo de ejecución rpc. No use el identificador implícito como parámetro para las llamadas a procedimientos remotos. En el ejemplo de código siguiente se muestra el uso de identificadores de enlace implícitos.
RPC_STATUS status;
status = RpcBindingFromStringBinding(
pszStringBinding,
&hHello);
status = MyRemoteProcedure();
status = RpcBindingFree(hHello);
...
En el ejemplo anterior, las funciones de biblioteca en tiempo de ejecución rpc RpcBindingFromStringBinding y RpcBindingFree requerían que el identificador de enlace implícito se pasara en sus listas de parámetros. Sin embargo, el procedimiento remoto MyRemoteProcedure no lo hizo, ya que no es una función de biblioteca en tiempo de ejecución RPC.