Fonction RpcEpRegisterNoReplace (rpcdce.h)

La fonction RpcEpRegisterNoReplace ajoute des informations d’adresse de serveur à la base de données de carte de point de terminaison locale.

Syntaxe

RPC_STATUS RpcEpRegisterNoReplace(
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVector,
  UUID_VECTOR        *UuidVector,
  RPC_CSTR           Annotation
);

Paramètres

IfSpec

Interface pour s’inscrire auprès de la base de données de carte de point de terminaison locale.

BindingVector

Pointeur vers un vecteur de handles de liaison sur lequel le serveur peut recevoir des appels de procédure distante.

UuidVector

Pointeur vers un vecteur d’UUID d’objet proposé par le serveur. L’application serveur construit ce vecteur.

Une valeur de paramètre null indique qu’il n’y a pas d’UUID d’objet à inscrire.

Annotation

Pointeur vers le commentaire de chaîne de caractères appliqué à chaque élément inter-produit ajouté à la base de données de carte de point de terminaison locale. La chaîne peut avoir jusqu’à 64 caractères, y compris le caractère de fin null. Spécifiez une valeur null ou une chaîne terminée par null (« \0 ») s’il n’existe aucune chaîne d’annotation.

La chaîne d’annotation est utilisée par les applications à des fins d’informations uniquement. RPC n’utilise pas cette chaîne pour déterminer quel serveur instance un client communique avec ou pour énumérer des éléments dans la base de données endpoint-map.

Valeur retournée

Valeur Signification
RPC_S_OK
L’appel a réussi.
RPC_S_NO_BINDINGS
Aucune liaison.
RPC_S_INVALID_BINDING
Le handle de liaison n’était pas valide.
RPC_S_WRONG_KIND_OF_BINDING
Il s’agissait du mauvais type de liaison pour l’opération.
 
Note Pour obtenir la liste des codes d’erreur valides, consultez Valeurs de retour RPC.
 

Remarques

La fonction RpcEpRegisterNoReplace ajoute des entrées à la base de données endpoint-map de l’hôte local. Cette fonction ne remplace pas les entrées de base de données existantes.

Un serveur utilise RpcEpRegisterNoReplace plutôt que RpcEpRegister lorsque plusieurs instances du serveur s’exécutent sur le même hôte. En d’autres termes, utilisez cette fonction lorsque plusieurs serveurs instance proposent à tout moment le même UUID d’interface, l’UUID d’objet et la même séquence de protocole.

Étant donné que les entrées ne sont pas remplacées lors de l’appel de RpcEpRegisterNoReplace, les serveurs doivent se désinscrire eux-mêmes avant de cesser de s’exécuter. Sinon, les données obsolètes s’accumulent chaque fois qu’un serveur instance cesse de s’exécuter sans appeler RpcEpUnregister. Les entrées obsolètes augmentent la probabilité qu’un client reçoive des points de terminaison vers des serveurs inexistants. Le client passe du temps à essayer de communiquer avec un serveur inexistant avant d’obtenir un autre point de terminaison.

Un serveur peut utiliser RpcEpRegister et RpcEpRegisterNoReplace pour inscrire des entrées dans la base de données du mappeur de point de terminaison. Avant Windows 2000, deux fonctions étaient disponibles pour permettre à un serveur de remplacer les entrées obsolètes dans la base de données du mappeur de point de terminaison restante des instances de serveur précédentes qui ne sont plus en cours d’exécution. La base de données du mappeur de point de terminaison supprime automatiquement les entrées inscrites par un serveur instance dès que le serveur cesse de fonctionner. Toutefois, les serveurs ne sont pas autorisés à remplacer les entrées du mappeur de point de terminaison d’un autre serveur à des fins de sécurité. Par conséquent, RpcEpRegister et RpcEpRegisterNoReplace exécutent en grande partie les mêmes fonctionnalités.

Une application serveur appelle RpcEpRegister pour inscrire les points de terminaison spécifiés en appelant l’une des fonctions suivantes :

Si le serveur exporte également vers la base de données name-service, le serveur appelle RpcEpRegister avec les mêmes valeurs IfSpec, BindingVector et UuidVector utilisées lors de l’appel de la fonction RpcNsBindingExport .

Si une séquence de protocole est utilisée sans spécifier de point de terminaison, la bibliothèque d’exécution RPC génère automatiquement un point de terminaison dynamique. Dans ce cas, le serveur peut appeler RpcServerInqBindings suivi de RpcEpRegisterNoReplace pour se rendre disponible pour plusieurs clients. Sinon, le serveur démarré automatiquement est connu uniquement du client pour lequel le serveur a été démarré.

Chaque élément ajouté à la base de données endpoint-map contient logiquement les éléments suivants :

  • UUID d’interface
  • Version de l’interface (majeure et mineure)
  • Handle de liaison
  • UUID d’objet (facultatif)
  • Annotation (facultatif)
RpcEpRegisterNoReplace crée un produit croisé à partir des paramètres IfSpec, BindingVector et UuidVector et ajoute chaque élément dans le produit croisé en tant qu’inscription distincte dans la base de données endpoint-map.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête rpcdce.h (inclure Rpc.h)
Bibliothèque Rpcrt4.lib
DLL Rpcrt4.dll

Voir aussi

RpcBindingFromStringBinding

RpcEpRegister

RpcEpUnregister

RpcNsBindingExport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf