Lire en anglais

Partager via


Création manuelle d’un proxy de service pour un service WCF

Le moyen le plus simple de créer un proxy de service client pour un service Windows Communication Foundation (WCF) consiste à utiliser la couche Modèle de service avec l’outil WsUtil, comme décrit dans la rubrique Création d’un client . Toutefois, si nécessaire, vous pouvez également créer un proxy de service manuellement. Cette API inclut une fonction WsCreateServiceProxy pour créer le proxy de service, ainsi que des structures, des énumérations, etc. pour définir les propriétés nécessaires à l’interopérabilité avec WCF.

WCF fournit un certain nombre de liaisons standard, chacune ciblant un scénario d’utilisation spécifique. La liaison à laquelle le service auquel vous essayez de vous connecter utilise, à son tour, détermine les propriétés de canal que vous devez personnaliser pour que votre proxy de service communique avec le service.

Création d’un proxy de service pour WSHttpBinding de WCF

WSHttpBinding est destiné au scénario de services web Internet principaux. Il utilise la version SOAP 1.2 et WS-Addressing version 1.0 plus récente et permet un large éventail de paramètres de sécurité sur les transports HTTP et HTTPS publics. WWSAPI n’a pas d’équivalent de WSHttpBinding (ou de l’une des liaisons standard WCF, d’ailleurs), mais étant donné que sa version SOAP par défaut, WS-Addressing version et le format d’encodage correspondent à ceux de WSHttpBinding, la création d’un proxy de service pour un service qui utilise WSHttpBinding est simple. Par exemple, pour créer un proxy de service pour communiquer avec un point de terminaison WSHttpBinding sans sécurité, vous pouvez simplement utiliser du code comme l’extrait de code suivant (la déclaration de variable et la création de tas et d’erreur sont omises). Notez qu’aucune propriété de canal ou description de sécurité n’est spécifiée dans l’appel à la fonction WsCreateServiceProxy .

// Create the proxy

hr = WsCreateServiceProxy(
        WS_CHANNEL_TYPE_REQUEST, 
        WS_HTTP_CHANNEL_BINDING, 
        NULL, // security description
        NULL, // proxy properties
        0, // proxy property count
        NULL, // channel properties
        0, // channel property count
        &proxy, 
        error);

La fonction crée le proxy de service et retourne un pointeur vers celui-ci dans le paramètre serviceProxy (&proxy dans l’appel de fonction ci-dessus).

Création d’un proxy de service pour BasicHttpBinding de WCF

Toutefois, lorsque vous créez manuellement un proxy de service pour un service WCF qui utilise une liaison BasicHttpBinding, il est nécessaire de définir la version SOAP et WS-Addressing propriétés du canal. Cela est dû au fait que WWSAPI utilise par défaut SOAP version 1.2 et WS-Addressing 1.0. BasicHttpBinding de WCF, en revanche, utilise SOAP version 1.1 et aucun adressage WS.

Pour définir la version SOAP et les propriétés WS-Addrssing du canal, déclarez un tableau de structures WS_CHANNEL_PROPERTY pour contenir les propriétés du canal et les informations associées.

WS_CHANNEL_PROPERTY channelProperties[4]; // Array to hold up to 4 channel properties

ULONG channelPropertyCount = 0; // Count of properties set
 
WS_ENVELOPE_VERSION soapVersion = WS_ENVELOPE_VERSION_SOAP_1_1; // Set required SOAP version
channelProperties[channelPropertyCount].id = WS_CHANNEL_PROPERTY_ENVELOPE_VERSION; // Type of first channel property
channelProperties[channelPropertyCount].value = &soapVersion; // Address of the SOAP version value
channelProperties[channelPropertyCount].valueSize = sizeof(soapVersion); // Size of the value
channelPropertyCount++; // Increment property count
 
WS_ADDRESSING_VERSION addressingVersion = WS_ADDRESSING_VERSION_TRANSPORT; // Set required WS-Addressing value
channelProperties[channelPropertyCount].id = WS_CHANNEL_PROPERTY_ADDRESSING_VERSION; // Type of second channel property
channelProperties[channelPropertyCount].value = &addressingVersion ; // Address of the WS-Addressing value
channelProperties[channelPropertyCount].valueSize = sizeof(addressingVersion ); // Size of the value
channelPropertyCount++; // Increment property count
 
// add more channel properties here

Transmettez ensuite le tableau des propriétés de canal (channelProperties) et le nombre de propriétés (channelPropertyCount) à WsCreateServiceProxy (ou WsCreateChannel si vous travaillez sur la couche de canal).

// Create the proxy

hr = WsCreateServiceProxy(
        WS_CHANNEL_TYPE_REQUEST, 
        WS_HTTP_CHANNEL_BINDING, 
        NULL, // security description
        NULL, // proxy properties
        0, // proxy property count
        channelProperties, // channel properties
        channelPropertyCount, // channel property count
        &proxy, 
        error);

Le tableau que vous avez déclaré contenir les propriétés est copié dans WsCreateServiceProxy et, par conséquent, vous pouvez libérer la mémoire du tableau de propriétés immédiatement après l’appel de la fonction. En outre, si vous allouez la mémoire à partir de la pile (comme l’extrait de code ci-dessus), vous pouvez également retourner à partir de la fonction immédiatement après l’appel.

Autres liaisons

En outre, WWSAPI fournit des mécanismes permettant de créer des proxys de service pour communiquer avec les services WCF à l’aide d’autres liaisons, telles que NetTcpBinding et WSFederationHttpBinding. La plupart de ces liaisons nécessitent la définition de propriétés de canal supplémentaires, telles que les descripteurs de sécurité. Pour obtenir des exemples illustrant l’utilisation d’autres liaisons, consultez la section Exemples des services Web Windows, en particulier les sous-sections Exemples de couche de canal TCP, Exemples de couche de canal HTTP et Exemples de couche de canal de sécurité .