Partager via


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 au runtime RPC qu’il est prêt à accepter des appels sur une ou plusieurs séquences de protocole. Choisir les séquences de protocole qu’une application serveur prend en charge est une décision importante ; différentes séquences de protocole ont des fonctionnalités très différentes. Les serveurs qui s’attendent à recevoir des appels localement doivent utiliser ncalrpc. Les serveurs qui acceptent des 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 Méfiez-vous des autres points de terminaison RPC en cours d’exécution dans le même processus.

L’exemple de code suivant utilise ncacn_ip_tcp.

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 = RpcServerUseProtseq(
    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 l’exemple de code, la plupart des programmes serveur définissent ce paramètre sur RPC_C_PROTSEQ_MAX_REQS_DEFAULT. 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é (RPC).

Vous pouvez également appeler les fonctions RpcServerUseAllProtseqs, RpcServerUseProtseqEx, RpcServerUseProtseqEp ou RpcServerUseProtseqEpEx.

Une fois qu’une application serveur sélectionne 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 de mappage de points 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 RpcServerInqBindingsest un pointeur vers un pointeur vers une structure RPC_BINDING_VECTOR. La bibliothèque d’exécution RPC alloue dynamiquement un tableau de vecteurs de liaison et stocke l’adresse du tableau dans cette variable de paramètre (dans ce cas, rpcBindingVector). Une fois que l’application serveur a fini d’utiliser ce vecteur de liaison (par exemple, après son passage aux fonctions appropriées), l’application serveur est chargée de libérer ce vecteur de liaison à l’aide de la fonction RpcBindingVectorFree.