Recherche de points de terminaison

Les programmes serveur écoutent les points de terminaison pour les demandes des clients. La syntaxe de la chaîne de point de terminaison dépend de la séquence de protocole que vous utilisez. Par exemple, le point de terminaison pour TCP/IP est un numéro de port et la syntaxe du point de terminaison pour les canaux nommés est un nom de canal valide.

Il existe deux types de points de terminaison : connus et dynamiques. Le choix du type de point de terminaison utilisé par votre programme détermine si l’application distribuée ou la bibliothèque d’exécution spécifie le point de terminaison.

Cette section décrit les points de terminaison et présente des informations sur la façon de les trouver. Il est organisé en rubriques suivantes :

Notes

Les termes points de terminaison statiques et points de terminaison connus sont équivalents et utilisés indifféremment.

 

Il est possible pour votre application cliente d’utiliser le mappage de point de terminaison pour déterminer si un programme serveur est en cours d’exécution. Votre client peut appeler RpcMgmtInqIfIds, RpcMgmtEpEltInqBegin et RpcMgmtEpEltInqDone pour voir si le serveur a inscrit l’interface particulière dont il a besoin dans la carte de point de terminaison.

Utilisation de points de terminaison connus

Les points de terminaison connus sont des points de terminaison préaffecté que le programme serveur utilise chaque fois qu’il s’exécute. Étant donné que le serveur écoute toujours ce point de terminaison particulier, le client tente toujours de s’y connecter. Les points de terminaison connus sont généralement attribués par l’autorité responsable du protocole de transport. Étant donné que les ordinateurs hôtes serveur ont un nombre fini de points de terminaison disponibles, les développeurs d’applications sont fortement déconseillés d’utiliser des points de terminaison connus. Un autre avantage des points de terminaison dynamiques est qu’ils simplifient la gestion et la maintenance à long terme du système.

Une application distribuée peut spécifier un point de terminaison connu dans une chaîne et passer cette chaîne en tant que paramètre à la fonction RpcServerUseProtseqEp. La chaîne de point de terminaison peut également apparaître dans l’en-tête d’interface de fichier IDL dans le cadre de l’attribut d’interface [ endpoint].

Vous pouvez utiliser deux approches pour implémenter le point de terminaison connu :

  • Spécifier toutes les informations d’une liaison de chaîne
  • Stocker le point de terminaison connu dans la base de données du service de noms

Vous pouvez écrire toutes les informations nécessaires pour établir une liaison dans une application distribuée lorsque vous la développez. Le client peut spécifier le point de terminaison connu directement dans une chaîne, appeler RpcStringBindingCompose pour créer une chaîne qui contient toutes les informations de liaison et fournir cette chaîne à la fonction RpcBindingFromStringBinding pour obtenir un handle. Le client et le serveur peuvent être codés en dur pour utiliser un point de terminaison connu, ou écrits de sorte que les informations sur le point de terminaison proviennent de la ligne de commande, d’un fichier de données, d’un fichier de configuration ou du fichier IDL.

Votre application cliente peut également interroger une base de données de service de noms pour obtenir des informations de point de terminaison connues.

Utilisation de points de terminaison dynamiques

Le nombre de points de terminaison pour un serveur particulier et une séquence de protocole particulière est généralement limité. Par exemple, lorsque vous utilisez la séquence de protocole ncacn_ip_tcp , indiquant que la communication réseau RPC se produit à l’aide de TCP/IP, seul un nombre limité de ports est disponible (la plupart des systèmes n’ont que la plage 1025 à 5000 ouverte). Les bibliothèques d’exécution RPC vous permettent d’attribuer des points de terminaison dynamiquement, selon les besoins. Étant donné que le nombre d’UUID d’interface possibles est pratiquement illimité, l’utilisation de l’UUID d’interface pour diriger l’appel offre plus d’espace pour l’expansion et plus de flexibilité.

Par défaut, les fonctions de bibliothèque d’exécution RPC recherchent des informations de point de terminaison lorsqu’elles interrogent une base de données de service de noms. Si le point de terminaison est dynamique, la base de données du service de noms ne contient pas d’informations de point de terminaison. Toutefois, la requête donne à votre programme client le nom d’un serveur. Il peut ensuite rechercher la carte du point de terminaison du serveur.

Si le client doit effectuer un appel de procédure distante à l’aide d’un point de terminaison dynamique, la méthode recommandée consiste à effectuer l’appel sur un handle de liaison partiellement lié. Le temps d’exécution RPC résout le point de terminaison en toute transparence. Cette méthode est supérieure à l’utilisation de la fonction RpcEpResolveBinding , car elle autorise des mécanismes de mise en cache avancés au moment de l’exécution de RPC.

Si un contrôle plus spécifique sur la sélection du point de terminaison est requis, les clients peuvent rechercher la carte de point de terminaison une entrée à la fois en appelant les fonctions RpcMgmtEpEltInqBegin, RpcMgmtEpEltInqNext et RpcMgmtEpEltInqDone .

Exportation de points de terminaison connus dans la base de données Endpoint Map

Il est possible de combiner les deux approches pour trouver des points de terminaison, en particulier lorsqu’un système distribué passe d’un modèle de point de terminaison connu à un modèle de point de terminaison dynamique. Dans ces transitions, une version intermédiaire du serveur utilise un point de terminaison connu, mais elle inscrit également le point de terminaison connu auprès de la base de données de mappage de points de terminaison. Cette approche permet aux clients qui utilisent un point de terminaison connu et aux clients qui utilisent un point de terminaison dynamique de se connecter. Une fois tous les serveurs mis à niveau, une nouvelle version cliente qui utilise uniquement des points de terminaison dynamiques peut être déployée. Une fois tous les clients mis à niveau, une version finale du serveur peut cesser d’utiliser des points de terminaison connus et commencer à utiliser uniquement des points de terminaison dynamiques.

Cette approche permet un chemin de transition pour les applications qui ont commencé avec un point de terminaison connu, mais qui souhaitent migrer vers un point de terminaison dynamique sans nécessiter une mise à jour simultanée de tous les serveurs et clients.