Udostępnij za pośrednictwem


Tworzenie klienta

Tworzenie klienta dla usług sieci Web jest znacznie uproszczone w WWSAPI przez interfejs API Modelu Usługi i narzędzie WsUtil.exe. Model usługi udostępnia interfejs API, który umożliwia klientowi wysyłanie i odbieranie wiadomości przez kanał jako wywołania metod w języku C. Narzędzie WsUtil generuje nagłówki i pomocniki do implementowania klienta. Te nagłówki obejmują typy i prototypy funkcji dla funkcji języka C reprezentujących usługi oferowane przez docelową usługę sieci Web. Pomocnicy służą do tworzenia serwera proxy usługi, który zawiera informacje o powiązaniu i adres punktu końcowego dla usługi.

Używanie narzędzia WsUtil do generowania nagłówków i pomocników

Aby wygenerować nagłówki i pomocniki, narzędzie WsUtil otwiera i odczytuje pliki metadanych dla usługi docelowej — pliki wsdl i xsd — i konwertuje je na nagłówki; dlatego konieczne jest wcześniejsze pobranie plików metadanych dla usługi docelowej, na przykład przy użyciu narzędzia SvcUtil, części programu Windows Communication Foundation. Ze względów bezpieczeństwa konieczne jest, aby kopie tych plików były wiarygodne. (Aby uzyskać więcej informacji, zobacz sekcję "Zabezpieczenia" w temacie narzędzia kompilatora WsUtil).

Aby uruchomić narzędzie WsUtil, użyj następującej składni wiersza polecenia, jeśli pliki WSDL i XSD dla usługi znajdują się we własnym katalogu: WsUtil.exe *.wsdl *.xsd. Alternatywnie możesz określić pliki według pełnej nazwy.

Narzędzie WsUtil zwykle generuje dwa pliki dla każdego pliku metadanych: nagłówek i plik C. Dodaj te pliki do projektu kodowania i użyj instrukcji #include, aby uwzględnić je w kodzie klienta. (Pliki XSD reprezentują typy, a pliki WSDL reprezentują operacje).

Tworzenie serwera proxy usługi

Nagłówek wygenerowany przez narzędzie WsUtil zawiera pomocniczą rutynę do tworzenia proxy usługi z wymaganym powiązaniem. Ta procedura jest zawarta w sekcji "Procedury pomocnika zasad" wygenerowanego pliku nagłówka. Na przykład nagłówek wygenerowany dla usługi kalkulatora przedstawionej w przykładzie httpcalculatorclientexample będzie zawierać następujący prototyp funkcji.

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

Uwzględnij ten pomocnik w swoim kodzie i przekaż dojście WS_SERVICE_PROXY, aby otrzymać dojście do utworzonego serwera proxy usługi. W najprostszym scenariuszu, w którym do funkcji jest przekazywany tylko serwer proxy usługi i obiekt błędu, wywołanie wygląda następująco.

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

Aby utworzyć część adresu serwera proxy do usługi, wywołaj WsOpenServiceProxy z uchwytem do serwera proxy i wskaźnikiem do WS_ENDPOINT_ADDRESS zawierającego adres punktu końcowego usługi, z którym chcesz nawiązać połączenie.

Implementowanie klienta przy użyciu prototypów funkcji

Nagłówki wygenerowane na podstawie plików WSDL usługi zawierają również prototypy funkcji języka C reprezentujące usługi dostępne w usłudze sieci Web i specyficzne dla wymaganego powiązania. Na przykład nagłówek wygenerowany dla usługi kalkulatora pokazany w elemencie HttpCalculatorServiceExample będzie zawierać następujący prototyp dla operacji mnożenia tej usługi.

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

Prototypy można skopiować i użyć ich jako szablonów do kodowania wywołań funkcji w kliencie, w każdym przypadku przekazując dojście do serwera proxy usługi. Po zakończeniu pracy z serwerem proxy usługi wywołaj WsCloseServiceProxy.