Partager via


Service Proxy

Un proxy de service est le proxy côté client d’un service. Le proxy de service permet aux applications d’envoyer et de recevoir des messages sur un canal en tant qu’appels de méthode.

Les proxys de service sont créés en fonction des besoins, ouverts, utilisés pour appeler un service et fermés lorsqu’ils ne sont plus nécessaires. Une application peut également réutiliser un proxy de service pour se connecter à plusieurs reprises au même service sans le temps et les ressources nécessaires à l’initialisation d’un proxy de service plusieurs fois. Le diagramme suivant illustre le flux des états possibles du proxy de service et des appels ou événements de fonction qui mènent d’un état à un autre.

Diagramme montrant les états du proxy de service et les appels ou événements de fonction qui mènent d’un état à un autre.

Ces états de proxy de service sont énumérés dans l’énumération WS_SERVICE_PROXY_STATE .

Comme l’illustrent le diagramme précédent et le code suivant, un proxy de service est créé par un appel à la fonction WsCreateServiceProxy . En tant que paramètres pour cet appel, WWSAPI fournit les énumérations suivantes :

Il accepte également les paramètres facultatifs à l’aide des types de données suivants :

Une fois le proxy de service créé, la fonction WsCreateServiceProxy retourne une référence au proxy de service , WS_SERVICE_PROXY, via un paramètre out.

WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
    WS_TCP_CHANNEL_BINDING, 
    WS_CHANNEL_TYPE_DUPLEX_SESSION, 
    NULL, 
    NULL, 
    0, 
    NULL,
    0,
    &serviceProxy, 
    error);

Une fois le proxy de service créé, l’application peut ouvrir le proxy de service pour la communication avec un service en appelant la fonction WsOpenServiceProxy , en passant une structure d’adresse contenant l’adresse réseau du point de terminaison de service auquel se connecter.

WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);

Une fois le proxy de service ouvert, l’application peut l’utiliser pour effectuer des appels au service.

hr = Add(
    serviceProxy, 
    1, 
    2, 
    &result, 
    NULL, 
    0, 
    NULL, 
    error);

Lorsque l’application n’a plus besoin du proxy de service, elle ferme le proxy de service en appelant la fonction WsCloseServiceProxy . Il libère également la mémoire associée en appelant WsFreeServiceProxy.

hr = WsCloseServiceProxy(
    serviceProxy, 
    NULL, 
    error);
hr = WsFreeServiceProxy(
    serviceProxy, 
    error);

Réutilisation du proxy de service

Après avoir appelé WsCloseServiceProxy , une application peut également réutiliser le proxy de service en appelant la fonction WsResetServiceProxy .

hr = WsResetServiceProxy(
    serviceProxy, 
    error);

Pour plus d’informations sur l’utilisation des proxys de service dans différents contextes, consultez les rubriques suivantes :

Sécurité

Les considérations suivantes en matière de conception d’application doivent être soigneusement prises en compte lorsque vous utilisez l’API de proxy de service WWSAPI :

  • Le proxy de service n’effectue aucune validation des données au-delà de la validation du profil de base 2.0 et de la sérialisation XML. Il incombe à l’application de valider les données contenues dans les paramètres qu’elle reçoit dans le cadre de l’appel.
  • La configuration du nombre maximal d’appels en attente sur le proxy de service, à l’aide de la valeur d’énumération WS_PROXY_PROPERTY_IDWS_PROXY_PROPERTY_MAX_PENDING_CALLS, offre une protection contre un serveur à exécution lente. Le maximum par défaut est 100. Les applications doivent être prudentes dans la modification des valeurs par défaut.
  • Le proxy de service ne fournit aucune garantie de sécurité au-delà de celles spécifiées dans la structure WS_SECURITY_DESCRIPTION utilisée pour communiquer avec le serveur.
  • Veillez à modifier les valeurs par défaut du message et du canal sur le proxy de service. Lisez les considérations de sécurité associées aux messages et canaux avant de modifier les propriétés associées.
  • Le proxy de service chiffre toutes les informations d’identification qu’il conserve en mémoire.

Les éléments d’API suivants concernent les proxys de service.

Rappel Description
WS_PROXY_MESSAGE_CALLBACK Appelé lorsque les en-têtes du message d’entrée sont sur le point d’être envoyés ou lorsqu’un en-tête de message de sortie vient d’être reçu.

 

Énumération Description
WS_CALL_PROPERTY_ID Énumère les paramètres facultatifs pour la configuration d’un appel sur une opération de service côté client.
WS_PROXY_PROPERTY_ID Énumère les paramètres facultatifs pour la configuration du proxy de service.
WS_SERVICE_PROXY_STATE État du proxy de service.

 

Fonction Description
WsAbandonCall Abandonne un appel spécifié sur un proxy de service spécifié.
WsAbortServiceProxy Annule toutes les entrées et sorties en attente sur un proxy de service spécifié.
WsCall Interne uniquement. Sérialise les arguments dans un message et l’envoie sur le canal.
WsCloseServiceProxy Ferme un proxy de service pour la communication.
WsCreateServiceProxy Crée un proxy de service.
WsFreeServiceProxy Libère la mémoire associée à un proxy de service.
WsGetServiceProxyProperty Récupère une propriété de proxy de service spécifiée.
WsOpenServiceProxy Ouvre un proxy de service sur un point de terminaison de service.
WsResetServiceProxy Réinitialise le proxy de service.

 

Handle Description
WS_SERVICE_PROXY Type opaque utilisé pour référencer un proxy de service.

 

Structure Description
WS_CALL_PROPERTY Spécifie une propriété d’appel.
WS_PROXY_PROPERTY. Spécifie une propriété proxy.