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 : bien connus et dynamiques. Le choix du type de point de terminaison que votre programme utilise détermine si l’application distribuée ou la bibliothèque Runtime spécifie le point de terminaison.
Cette section traite des points de terminaison et présente des informations sur la façon de les trouver. Elle est organisée dans les rubriques suivantes :
- Utilisation de points de terminaison de Well-Known
- Utilisation de points de terminaison dynamiques
- Exportation des points de terminaison Well-Known dans la base de données de mappage des points de terminaison
Notes
Les termes statiques des points de terminaison et des points de terminaison connus sont équivalents et utilisés indifféremment.
Il est possible que votre application cliente utilise le mappage de point de terminaison pour déterminer si un programme serveur est en cours d’exécution. Votre client peut appeler RpcMgmtInqIfIds, RpcMgmtEpEltInqBeginet RpcMgmtEpEltInqDone pour voir si le serveur a inscrit l’interface particulière dont il a besoin dans le mappage de point de terminaison.
Utilisation de points de terminaison connus
Les points de terminaison connus sont des points de terminaison préattribués 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 affectés par l’autorité responsable du protocole de transport. Étant donné que les ordinateurs hôtes du 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 la passer 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 de [ point de terminaison ] .
Vous pouvez utiliser deux approches pour implémenter le point de terminaison connu :
- Spécifier toutes les informations dans une liaison de chaîne
- Stocker le point de terminaison connu dans la base de données de 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 afin que les informations de 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 bien 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 sont généralement limités. Par exemple, lorsque vous utilisez la séquence de protocole _ _ TCP IP ncacn , qui indique que la communication réseau RPC se produit à l’aide de TCP/IP, seul un nombre limité de ports sont disponibles (la plupart des systèmes ont uniquement les plages 1025 à 5000 ouvertes). Les bibliothèques Runtime RPC vous permettent d’assigner des points de terminaison de manière dynamique, 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 davantage d’espace pour l’extension et davantage de flexibilité.
Par défaut, les fonctions de la bibliothèque Runtime RPC recherchent les 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 donnera au programme client le nom d’un serveur. Il peut ensuite rechercher le mappage 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 permet des mécanismes de mise en cache avancés dans le temps d’exécution RPC.
Si un contrôle plus spécifique sur la sélection du point de terminaison est requis, les clients peuvent rechercher une entrée à la fois dans le mappage de point de terminaison en appelant les fonctions RpcMgmtEpEltInqBegin, RpcMgmtEpEltInqNextet RpcMgmtEpEltInqDone .
Exportation des points de terminaison connus dans la base de données de mappage des points de terminaison
Il est possible de mélanger les deux approches de recherche 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 utilisera un point de terminaison connu, mais elle inscrira également le point de terminaison connu avec la base de données de mappage des points de terminaison. Cette approche permet aux clients qui utilisent un point de terminaison et des clients qui utilisent un point de terminaison dynamique de se connecter. Une fois que tous les serveurs ont été mis à niveau, vous pouvez déployer une nouvelle version du client qui utilise uniquement des points de terminaison dynamiques. Une fois que tous les clients ont été mis à niveau, une version de serveur finale 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 démarré avec un point de terminaison connu, mais souhaitent migrer vers un point de terminaison dynamique sans nécessiter une mise à jour simultanée de tous les serveurs et clients.