Condividi tramite


Creazione di un client

La creazione di un client per i servizi Web è notevolmente semplificata in WWSAPI dall'API del modello di servizio e dallo strumento diWsUtil.exe . Il modello di servizio fornisce un'API che consente al client di inviare e ricevere messaggi su un canale come chiamate al metodo C. Lo strumento WsUtil genera intestazioni e helper per l'implementazione del client. Queste intestazioni includono i tipi e i prototipi di funzione per le funzioni C che rappresentano i servizi offerti dal servizio Web di destinazione. Gli helper vengono usati per creare il proxy del servizio, che contiene le informazioni di associazione e l'indirizzo dell'endpoint per il servizio.

Uso di WsUtil per generare intestazioni e helper

Per generare le intestazioni e gli helper, WsUtil apre e legge i file di metadati per il servizio di destinazione, ovvero file wsdl e xsd, e li converte in intestazioni; pertanto, è necessario recuperare i file di metadati per il servizio di destinazione in anticipo, ad esempio usando SvcUtil, una parte di Windows Communication Foundation. Per motivi di sicurezza, è fondamentale che le copie di questi file siano attendibili. Per altre informazioni, vedere la sezione "Sicurezza" dell'argomento WsUtil Compiler Tool .

Per eseguire WsUtil, usare la sintassi della riga di comando seguente se i file WSDL e XSD per il servizio si trovano nella propria directory: . WsUtil.exe *.wsdl *.xsd In alternativa, è possibile specificare i file in base al nome completo.

WsUtil genera in genere due file per ogni file di metadati: un'intestazione e un file C. Aggiungere questi file al progetto di codifica e usare #include istruzioni per includerli nel codice per il client. I file XSD rappresentano tipi e i file WSDL rappresentano operazioni.

Creazione del proxy del servizio

L'intestazione generata da WsUtil contiene una routine helper per la creazione del proxy del servizio con l'associazione necessaria. Questa routine è inclusa nella sezione "Routine helper policy" del file di intestazione generato. Ad esempio, l'intestazione generata per il servizio calcolatrice illustrata nell'esempio httpcalculatorclientexample conterrà il prototipo di funzione seguente.

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);

Incorporare questo helper nel codice e passare un handle WS_SERVICE_PROXY per ricevere l'handle al proxy del servizio creato. Nello scenario più semplice, in cui alla funzione vengono passati solo un handle proxy del servizio e un oggetto errore, la chiamata sarà simile alla seguente.

hr = BasicHttpBinding_ICalculator_CreateServiceProxy(
            NULL,
            NULL,
            0,
            &serviceProxy,
            error);

Per creare la parte dell'indirizzo del proxy del servizio, chiamare WsOpenServiceProxy con un handle al proxy del servizio e un puntatore a un WS_ENDPOINT_ADDRESS contenente l'indirizzo dell'endpoint del servizio a cui si vuole connettersi.

Implementazione del client con prototipi di funzione

Le intestazioni generate dai file WSDL del servizio contengono anche prototipi di funzioni C che rappresentano i servizi disponibili dal servizio Web e specifici dell'associazione richiesta. Ad esempio, un'intestazione generata per il servizio calcolatrice illustrata in HttpCalculatorServiceExample conterrà il prototipo seguente per l'operazione di moltiplicazione del servizio.

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);

È possibile copiare i prototipi e usarli come modelli per codificare le chiamate di funzione nel client, in ogni caso passando l'handle al proxy del servizio. Al termine del proxy del servizio, chiamare WsCloseServiceProxy.