클라이언트 만들기
WWSAPI에서는 서비스 모델 API 및 WsUtil.exe 도구를 사용하여 웹 서비스용 클라이언트를 만드는 작업이 크게 간소화되었습니다. 서비스 모델은 클라이언트가 C 메서드 호출로 채널을 통해 메시지를 보내고 받을 수 있도록 하는 API를 제공합니다. WsUtil 도구는 클라이언트를 구현하기 위한 헤더 및 도우미를 생성합니다. 이러한 헤더에는 대상 웹 서비스에서 제공하는 서비스를 나타내는 C 함수의 형식 및 함수 프로토타입이 포함됩니다. 도우미는 서비스에 대한 바인딩 정보 및 엔드포인트 주소를 포함하는 서비스 프록시를 만드는 데 사용됩니다.
WsUtil을 사용하여 헤더 및 도우미 생성
헤더 및 도우미를 생성하기 위해 WsUtil은 대상 서비스(wsdl 및 xsd 파일)에 대한 메타데이터 파일을 열고 읽고 헤더로 변환합니다. 따라서 Windows Communication Foundation의 일부인 SvcUtil을 사용하여 대상 서비스에 대한 메타데이터 파일을 미리 검색해야 합니다. 보안상의 이유로 이러한 파일의 복사본을 신뢰할 수 있는 것이 중요합니다. 자세한 내용은 WsUtil 컴파일러 도구 항목의 "보안" 섹션을 참조하세요.
WsUtil을 실행하려면 서비스에 대한 WSDL 및 XSD 파일이 자체 디렉터리에 WsUtil.exe *.wsdl *.xsd
있는 경우 다음 명령줄 구문을 사용합니다. 또는 전체 이름으로 파일을 지정할 수 있습니다.
WsUtil은 일반적으로 각 메타데이터 파일에 대해 헤더와 C 파일이라는 두 개의 파일을 생성합니다. 이러한 파일을 코딩 프로젝트에 추가하고 #include 문을 사용하여 클라이언트의 코드에 포함합니다. (XSD 파일은 형식을 나타내고 WSDL 파일은 작업을 나타냅니다.)
서비스 프록시 만들기
WsUtil에서 생성된 헤더에는 필요한 바인딩을 사용하여 서비스 프록시를 만들기 위한 도우미 루틴이 포함되어 있습니다. 이 루틴은 생성된 헤더 파일의 "정책 도우미 루틴" 섹션에 포함되어 있습니다. 예를 들어 httpcalculatorclientexample 예제에 설명된 계산기 서비스에 대해 생성된 헤더에는 다음 함수 프로토타입이 포함됩니다.
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);
코드에 이 도우미를 통합하고 WS_SERVICE_PROXY 핸들을 전달하여 생성된 서비스 프록시에 핸들을 수신합니다. 서비스 프록시 핸들과 오류 개체만 함수에 전달되는 가장 간단한 시나리오에서 호출은 다음과 같습니다.
hr = BasicHttpBinding_ICalculator_CreateServiceProxy(
NULL,
NULL,
0,
&serviceProxy,
error);
서비스 프록시의 주소 부분을 만들려면 서비스 프록시에 대한 핸들과 연결하려는 서비스 엔드포인트 주소가 포함된 WS_ENDPOINT_ADDRESS 대한 포인터를 사용하여 WsOpenServiceProxy를 호출합니다.
함수 프로토타입을 사용하여 클라이언트 구현
서비스 WSDL 파일에서 생성된 헤더에는 웹 서비스에서 사용할 수 있는 서비스 및 필요한 바인딩과 관련된 서비스를 나타내는 C 함수 프로토타입도 포함되어 있습니다. 예를 들어 HttpCalculatorServiceExample에 설명된 계산기 서비스에 대해 생성된 헤더에는 해당 서비스의 곱하기 작업에 대한 다음 프로토타입이 포함됩니다.
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);
프로토타입을 복사하고 클라이언트에서 함수 호출을 코딩하기 위한 템플릿으로 사용할 수 있으며, 각 경우 핸들을 서비스 프록시에 전달할 수 있습니다. 서비스 프록시를 완료하면 WsCloseServiceProxy를 호출합니다.