Compartilhar via


Criando um cliente

A criação de um cliente para serviços Web é muito simplificada no WWSAPI pela API do Modelo de Serviço e pela ferramenta WsUtil.exe . O Modelo de Serviço fornece uma API que permite que o cliente envie e receba mensagens por um canal como chamadas de método C. A ferramenta WsUtil gera cabeçalhos e auxiliares para implementar o cliente. Esses cabeçalhos incluem os tipos e protótipos de função para funções C que representam os serviços oferecidos pelo serviço Web de destino. Os auxiliares são usados para criar o proxy de serviço, que contém as informações de associação e o endereço do ponto de extremidade para o serviço.

Usando o WsUtil para gerar cabeçalhos e auxiliares

Para gerar os cabeçalhos e auxiliares, o WsUtil abre e lê os arquivos de metadados para o serviço de destino — arquivos wsdl e xsd — e os converte em cabeçalhos; portanto, é necessário recuperar os arquivos de metadados para o serviço de destino com antecedência, por exemplo, usando o SvcUtil, uma parte do Windows Communication Foundation. Por motivos de segurança, é imperativo que suas cópias desses arquivos sejam confiáveis. (Para obter mais informações, consulte a seção "Segurança" do tópico Ferramenta do Compilador WsUtil .)

Para executar o WsUtil, use a seguinte sintaxe de linha de comando se os arquivos WSDL e XSD para o serviço estiverem em seu próprio diretório: WsUtil.exe *.wsdl *.xsd. Como alternativa, você pode especificar os arquivos por nome completo.

O WsUtil geralmente gera dois arquivos para cada arquivo de metadados: um cabeçalho e um arquivo C. Adicione esses arquivos ao projeto de codificação e use #include instruções para incluí-los no código do cliente. (Os arquivos XSD representam tipos e os arquivos WSDL representam operações.)

Criando o Proxy de Serviço

O cabeçalho gerado pelo WsUtil contém uma rotina auxiliar para criar o proxy de serviço com a associação necessária. Essa rotina está incluída na seção "Rotinas auxiliares da política" do arquivo de cabeçalho gerado. Por exemplo, o cabeçalho gerado para o serviço de calculadora ilustrado no exemplo httpcalculatorclientexample conterá o protótipo de função a seguir.

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

Incorpore esse auxiliar em seu código e passe um identificador de WS_SERVICE_PROXY para receber o identificador para o proxy de serviço criado. No cenário mais simples, no qual apenas um identificador de proxy de serviço e um objeto de erro são passados para a função, a chamada é semelhante à seguinte.

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

Para criar a parte de endereço do proxy de serviço, chame WsOpenServiceProxy com um identificador para o proxy de serviço e um ponteiro para um WS_ENDPOINT_ADDRESS que contém o endereço do ponto de extremidade de serviço ao qual você deseja se conectar.

Implementando o cliente com protótipos de função

Os cabeçalhos gerados a partir dos arquivos WSDL de serviço também contêm protótipos de função C que representam os serviços disponíveis do serviço Web e específicos para a associação necessária. Por exemplo, um cabeçalho gerado para o serviço de calculadora ilustrado em HttpCalculatorServiceExample conterá o protótipo a seguir para a operação de multiplicação desse serviço.

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

Você pode copiar os protótipos e usá-los como modelos para codificar as chamadas de função em seu cliente, em cada caso passando o identificador para o proxy de serviço. Quando terminar de usar o proxy de serviço, chame WsCloseServiceProxy.