Interfaces de servidor de publicidad
El lado servidor de una aplicación que usa identificadores automáticos debe llamar a la función RpcNsBindingExport para que la información de enlace sobre el servidor esté disponible para los clientes. Los identificadores de enlace automáticos requieren un servicio de nombres que se ejecute en un servidor al que se pueda acceder al cliente. La implementación de Microsoft del servicio de nombres, Microsoft Locator, administra los identificadores automáticos. Las aplicaciones de servidor que usan identificadores de enlace implícitos y explícitos también pueden anunciar su presencia en la base de datos del servicio de nombres.
Normalmente, el servidor llama a las siguientes funciones en tiempo de ejecución:
/* auto handle server application (fragment) */
//interface header file that the MIDL compiler generates
#include "auto.h"
void main(void)
{
RpcUseProtseqEp(...);
RpcServerRegisterIf(...);
RpcServerInqBindings(...);
RpcNsBindingExport(...);
...
}
Las llamadas a las dos primeras funciones de este fragmento de código son similares al ejemplo Hello, World. Estas funciones hacen que la información sobre el enlace esté disponible para el cliente. Las llamadas a RpcServerInqBindings y RpcNsBindingExport colocan la información en la base de datos del servicio de nombres. La llamada a RpcServerInqBindings rellena el vector de enlace con identificadores de enlace válidos antes de que los identificadores se exporten al servicio de nombres. Una vez que el programa de servidor exporta los identificadores a la base de datos, el cliente (o códigos auxiliares de cliente) puede llamar a RpcNsBindingImportBegin y RpcNsBindingImportNext para obtener esta información. Para obtener más información, consulte Buscar sistemas host de servidor.
Las llamadas a RpcServerInqBindings y RpcNsBindingExport y sus estructuras de datos asociadas son similares a las siguientes:
RPC_BINDING_VECTOR * pBindingVector;
RPCSTATUS status;
status = RpcServerInqBindings(&pBindingVector);
status = RpcNsBindingExport(
fNameSyntaxType, // name syntax type
pszAutoEntryName, // nsi entry name
autoh_ServerIfHandle, // if server handle
pBindingVector, // set in previous call
NULL); // UUID vector
Tenga en cuenta que el parámetro RpcServerInqBindingspBindingVector es un puntero a un puntero a RPC_BINDING_VECTOR. Recuerde también que cada llamada a RpcNsBindingExport debe ir seguida de una llamada a RpcBindingVectorFree.
Para quitar la interfaz exportada de la base de datos del servicio de nombres, el servidor llama a RpcNsBindingUnexport como se muestra:
status = RpcNsBindingUnexport(
fNameSyntaxType,
pszAutoEntryName,
auto_ServerIfHandle,
NULL); // unexport handles only
La función RpcNsBindingUnexport solo se debe usar cuando el servicio se quita permanentemente. No se debe usar cuando el servicio está deshabilitado temporalmente, por ejemplo, cuando el servidor se apaga para el mantenimiento. Un programa de servidor se puede registrar con la base de datos del servicio de nombres, pero no está disponible porque el servidor está temporalmente sin conexión. La aplicación cliente debe contener código de control de excepciones para esta condición.
Para obtener más información sobre el contenido y el formato de la base de datos del servicio de nombres, vea La base de datos del servicio de nombres RPC.
Las aplicaciones pueden usar el servicio Active Directory si los programas cliente y servidor se ejecutan en Windows 2000. Los equipos que ejecutan los programas cliente y servidor deben ser miembros de un dominio de Windows 2000.
Para anunciar su presencia mediante el servicio Active Directory, el programa de servidor debe ejecutarse en el contexto de seguridad de un administrador de dominio. Si se ejecuta en el contexto de los usuarios del dominio, un administrador de dominio debe modificar la lista de control de acceso (ACL) en el contenedor de servicios RPC. Para obtener más información, consulte la documentación de Active Directory.