Een client maken
Het maken van een client voor webservices is aanzienlijk vereenvoudigd in WWSAPI door de Service Model-API en het hulpprogramma WsUtil.exe. Het servicemodel biedt een API waarmee de client berichten kan verzenden en ontvangen via een kanaal als C-methodeaanroepen. Het hulpprogramma WsUtil genereert headers en helpers voor de implementatie van de client. Deze headers omvatten de typen en functieprototypes voor C-functies die de services vertegenwoordigen die door de doelwebservice worden aangeboden. De helpers worden gebruikt om de serviceproxy te maken, die de bindingsinformatie en het eindpuntadres bevat voor de service.
WsUtil gebruiken om headers en Helpers te genereren
Om de headers en helpers te genereren, opent WsUtil de metagegevensbestanden voor de doelservice ( wsdl- en xsd-bestanden) en converteert ze naar headers; Daarom is het noodzakelijk om de metagegevensbestanden voor de doelservice vooraf op te halen, bijvoorbeeld met behulp van SvcUtil, een onderdeel van de Windows Communication Foundation. Om veiligheidsredenen is het noodzakelijk dat uw kopieën van deze bestanden betrouwbaar zijn. (Zie de sectie Beveiliging van het WsUtil Compiler-hulpprogramma onderwerp voor meer informatie.)
Als u WsUtil wilt uitvoeren, gebruikt u de volgende opdrachtregelsyntaxis als de WSDL- en XSD-bestanden voor de service zich in hun eigen map bevinden: WsUtil.exe *.wsdl *.xsd
. U kunt de bestanden ook op volledige naam opgeven.
WsUtil genereert over het algemeen twee bestanden voor elk metagegevensbestand: een header en een C-bestand. Voeg deze bestanden toe aan uw coderingsproject en gebruik #include instructies om ze op te nemen in de code voor uw client. (De XSD-bestanden vertegenwoordigen typen en de WSDL-bestanden vertegenwoordigen bewerkingen.)
De serviceproxy maken
De header die door WsUtil wordt gegenereerd, bevat een helperroutine voor het maken van de serviceproxy met de vereiste binding. Deze routine is opgenomen in de sectie Beleidshulproutines van het gegenereerde headerbestand. De gegenereerde header voor de calculatorservice die wordt geïllustreerd in de httpcalculatorclientexample voorbeeld bevat bijvoorbeeld het volgende prototype van de functie.
HRESULT BasicHttpBinding_ICalculator_CreateServiceProxy(
__in_opt WS_HTTP_BINDING_TEMPLATE* templateValue,
__in_ecount_opt(proxyPropertyCount) const WS_PROXY_PROPERTY* proxyProperties,
__in const ULONG proxyPropertyCount,
__deref_out_opt WS_SERVICE_PROXY** _serviceProxy,
__in_opt WS_ERROR* error);
Neem deze helper op in uw code en geef een WS_SERVICE_PROXY handle door om de handle naar de gemaakte serviceproxy te ontvangen. In het eenvoudigste scenario, waarin alleen een serviceproxy-handle en een foutobject worden doorgegeven aan de functie, ziet de aanroep er als volgt uit.
hr = BasicHttpBinding_ICalculator_CreateServiceProxy(
NULL,
NULL,
0,
&serviceProxy,
error);
Als u het adresgedeelte van de serviceproxy wilt maken, roept u WsOpenServiceProxy- aan met een ingang naar de serviceproxy en een aanwijzer naar een WS_ENDPOINT_ADDRESS met het service-eindpuntadres waarmee u verbinding wilt maken.
De client implementeren met functieprototypes
De headers die zijn gegenereerd op basis van de WSDL-servicebestanden bevatten ook C-functieprototypes die de services vertegenwoordigen die beschikbaar zijn via de webservice en specifiek voor de vereiste binding. Een header die is gegenereerd voor de rekenmachineservice die wordt geïllustreerd in HttpCalculatorServiceExample, bevat bijvoorbeeld het volgende prototype voor de vermenigvuldigingsbewerking van die service.
HRESULT BasicHttpBinding_ICalculator_Multiply(
__in WS_SERVICE_PROXY* _serviceProxy,
__in double n1,
__in double n2,
__out double* MultiplyResult,
__in WS_HEAP* _heap,
__in_ecount_opt(_callPropertyCount) const WS_CALL_PROPERTY* _callProperties,
__in const ULONG _callPropertyCount,
__in_opt const WS_ASYNC_CONTEXT* _asyncContext,
__in_opt WS_ERROR* _error);
U kunt de prototypen kopiëren en gebruiken als sjablonen voor het coderen van de functie-aanroepen in uw client, in elk geval door de handle door te geven aan de serviceproxy. Wanneer u klaar bent met de serviceproxy, roept u WsCloseServiceProxy-aan.