Mise à disposition du serveur sur le réseau
Pour qu’une application serveur puisse accepter des appels de procédure distante, elle doit être disponible sur le réseau. Pour ce faire, le serveur indique à la durée d’exécution RPC qu’il est disposé à accepter des appels sur une ou plusieurs séquences de protocole. Le choix des séquences de protocole prises en charge par une application serveur est une décision importante. différentes séquences de protocole ont des fonctionnalités très différentes. Les serveurs qui attendent que les appels soient reçus localement doivent utiliser Ncalrpc. Les serveurs qui acceptent les appels distants doivent utiliser ncacn _ IP _ TCP. Les serveurs ne doivent pas vérifier que la séquence de protocole sur laquelle ils reçoivent des appels est la séquence de protocole sur laquelle ils s’attendent à recevoir des appels. Pour plus d’informations, consultez se méfier des autres points de terminaison RPC s’exécutant dans le même processus dans les meilleures pratiques de programmation RPC.
L’exemple suivant utilise le _ _ protocole TCP IP ncacn.
La plupart des programmes serveur utilisent toutes les séquences de protocole disponibles sur le réseau. Pour ce faire, ils appellent la fonction RpcServerUseProtseq , comme indiqué dans le fragment de code suivant :
RPC_STATUS status;
status = RpcServerUseAllProtseq(
L"ncacn_ip_tcp",
RPC_C_PROTSEQ_MAX_REQS_DEFAULT, // Protseq dependent parameter
NULL); // Always specify NULL here.
Le premier paramètre de la fonction RpcServerUseProtseq est la séquence de protocole. Le deuxième paramètre dépend de la séquence de protocole. Comme illustré dans le fragment de code, la plupart des programmes serveur définissent ce paramètre sur RPC _ C _ PROTSEQ Max, demandes _ _ _ par défaut. Cette valeur définit la bibliothèque RPC pour utiliser la valeur par défaut. Le troisième paramètre est un descripteur de sécurité et ne doit pas être utilisé dans les applications. Pour plus d’informations, consultez sécurité.
Vous pouvez également utiliser les fonctions RpcServerUseAllProtseqs, RpcServerUseProtseqEx, RpcServerUseProtseqEpou RpcServerUseProtseqEpEx .
Une fois qu’une application serveur a sélectionné au moins une séquence de protocole, les serveurs qui utilisent des points de terminaison dynamiques doivent créer des informations de liaison pour chaque séquence de protocole qu’elle utilise. Le serveur stocke les informations de liaison dans un vecteur de liaison qu’il peut ensuite exporter vers le service mappeur de point de terminaison.
Utilisez la fonction RpcServerInqBindings pour obtenir un vecteur de liaison pour l’application serveur, comme illustré dans l’exemple suivant :
RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
status = RpcServerInqBindings(&rpcBindingVector);
Le seul paramètre passé à la fonction RpcServerInqBindings est un pointeur vers un pointeur vers une structure de _ _ vecteurs de liaison RPC . La bibliothèque Runtime RPC alloue dynamiquement un tableau de vecteurs de liaison et stocke l’adresse du tableau dans la variable de paramètre (dans ce cas, rpcBindingVector). Chaque application serveur est chargée de libérer ce vecteur de liaison à l’aide de la fonction RpcBindingVectorFree une fois qu’il a fini de l’utiliser (par exemple, après l’avoir passé aux fonctions appropriées).