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. Par ailleurs, une application peut réutiliser un proxy de service pour se connecter à plusieurs reprises au même service sans le temps nécessaire à l’initialisation d’un proxy de service plusieurs fois. Le diagramme suivant illustre le flux des états possibles du proxy de service et les 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 de fonction ou les événements qui mènent d’un état à un autre.

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

Comme le diagramme précédent et le code suivant illustrent, 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 :

Lorsque le proxy de service a été 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);

Lorsque le proxy de service a été créé, l’application peut ouvrir le proxy de service pour la communication vers un service en appelant la fonction WsOpenServiceProxy, en passant une adresse structure 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

Sinon, après avoir appelé WsCloseServiceProxy une application peut 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 de conception d’application suivantes doivent être soigneusement notées lorsque vous utilisez l’API proxy de service WWSAPI :

  • Le proxy de service n’effectue aucune validation des données au-delà de la validation basic Profile 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 en cours d’exécution lent. La valeur maximale par défaut est 100. Les applications doivent être prudentes pour modifier les 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.
  • Prenez soin de modifier message et canal par défaut sur le proxy de service. Lisez les considérations de sécurité associées aux messages et canaux avant de modifier l’une des 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 sont liés aux 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 les 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é proxy de service spécifiée.
WsOpenServiceProxy Ouvre un proxy de service vers un point de terminaison de service.
WsResetServiceProxy Réinitialise le proxy de service.

 

Manche 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.