Interfaces du serveur publicitaire

Le côté serveur d’une application qui utilise des handles automatiques doit appeler la fonction RpcNsBindingExport pour rendre les informations de liaison sur le serveur disponibles pour les clients. Les handles de liaison automatique nécessitent qu’un service de nom s’exécute sur un serveur accessible au client. L’implémentation Microsoft du service de nom, Microsoft Locator, gère les handles automatiques. Les applications serveur qui utilisent des handles de liaison implicites et explicites peuvent également publier leur présence dans la base de données du service de noms.

En règle générale, le serveur appelle les fonctions d’exécution suivantes :

/* auto handle server application (fragment) */
 
//interface header file that the MIDL compiler generates
#include "auto.h" 
 
void main(void)
{
    RpcUseProtseqEp(...);
    RpcServerRegisterIf(...);
    RpcServerInqBindings(...);
    RpcNsBindingExport(...);
    ...
}

Les appels aux deux premières fonctions de ce fragment de code sont similaires à l’exemple Hello, World. Ces fonctions mettent des informations sur la liaison à la disposition du client. Les appels à RpcServerInqBindings et RpcNsBindingExport placent les informations dans la base de données du service de noms. L’appel à RpcServerInqBindings remplit le vecteur de liaison avec des handles de liaison valides avant que les handles ne soient exportés vers le service de noms. Une fois que le programme serveur a exporté les handles vers la base de données, le client (ou les stubs clients) peut appeler RpcNsBindingImportBegin et RpcNsBindingImportNext pour obtenir ces informations. Pour plus d’informations, consultez Recherche de systèmes hôtes de serveur.

Les appels à RpcServerInqBindings et RpcNsBindingExport et leurs structures de données associées ressemblent à ce qui suit :

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

Notez que le paramètre RpcServerInqBindingspBindingVector est un pointeur vers un pointeur vers RPC_BINDING_VECTOR. N’oubliez pas également que chaque appel à RpcNsBindingExport doit être suivi d’un appel à RpcBindingVectorFree.

Pour supprimer l’interface exportée de la base de données du service de noms, le serveur appelle RpcNsBindingUnexport comme indiqué :

status = RpcNsBindingUnexport(
                fNameSyntaxType, 
                pszAutoEntryName,  
                auto_ServerIfHandle,
                NULL);              // unexport handles only

La fonction RpcNsBindingUnexport doit être utilisée uniquement lorsque le service est supprimé définitivement. Il ne doit pas être utilisé lorsque le service est temporairement désactivé, par exemple lorsque le serveur est arrêté pour maintenance. Un programme serveur peut s’inscrire auprès de la base de données du service de noms, mais n’est pas disponible, car le serveur est temporairement hors connexion. L’application cliente doit contenir du code de gestion des exceptions pour une telle condition.

Pour plus d’informations sur le contenu et le format de la base de données du service de noms, consultez La base de données du service de noms RPC.

Les applications peuvent utiliser le service Active Directory si les programmes client et serveur s’exécutent sous Windows 2000. Les ordinateurs exécutant les programmes client et serveur doivent tous deux être membres d’un domaine Windows 2000.

Pour publier sa présence à l’aide du service Active Directory, le programme serveur doit s’exécuter dans le contexte de sécurité d’un administrateur de domaine. S’il s’exécute dans le contexte des utilisateurs du domaine, un administrateur de domaine doit modifier la liste de contrôle d’accès (ACL) sur le conteneur des services RPC. Pour plus d’informations, consultez la documentation Active Directory.