建立用戶端
服務 模型 API 和 WsUtil.exe 工具可大幅簡化 WWSAPI 中建立 Web 服務的用戶端。 服務模型提供 API,可讓用戶端以 C 方法呼叫的形式透過通道傳送和接收訊息。 WsUtil 工具會產生標頭和協助程式,以實作用戶端。 這些標頭包含 C 函式的類型和函式原型,代表目標 Web 服務所提供的服務。 協助程式可用來建立服務 Proxy,其中包含服務的系結資訊和 端點位址 。
使用 WsUtil 產生標頭和協助程式
若要產生標頭和協助程式,WsUtil 會開啟並讀取目標服務的中繼資料檔案 —wsdl 和 xsd 檔案,並將其轉換成標頭;因此,您必須事先擷取目標服務的中繼資料檔案,例如使用 SvcUtil,這是 Windows Communication Foundation 的一部分。 基於安全性考慮,您必須信任這些檔案的複本。 (如需詳細資訊,請參閱 WsUtil Compiler Tool 主題的一節。)
若要執行 WsUtil,如果服務的 WSDL 和 XSD 檔案位於自己的目錄中,請使用下列命令列語法: WsUtil.exe *.wsdl *.xsd
。 或者,您可以依完整名稱指定檔案。
WsUtil 通常會為每個中繼資料檔案產生兩個檔案:標頭和 C 檔案。 將這些檔案新增至您的程式碼專案,並使用 #include 語句將它們包含在用戶端的程式碼中。 (XSD 檔案代表類型,而 WSDL 檔案代表 operations.)
建立服務 Proxy
WsUtil 所產生的標頭包含協助程式常式,可建立具有必要系結的服務 Proxy。 此常式包含在所產生標頭檔的「原則協助程式常式」區段中。 例如, 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 控制碼,以接收所建立服務 Proxy 的控制碼。 在最簡單的案例中,只有服務 Proxy 控制碼和錯誤物件會傳遞至函式,呼叫如下所示。
hr = BasicHttpBinding_ICalculator_CreateServiceProxy(
NULL,
NULL,
0,
&serviceProxy,
error);
若要建立服務 Proxy 的位址部分,請使用服務 Proxy 的控制碼呼叫 WsOpenServiceProxy ,以及包含您要連線之服務端點位址 之WS_ENDPOINT_ADDRESS 指標。
使用函式原型實作用戶端
從服務 WSDL 檔案產生的標頭也包含 C 函式原型,代表可從 Web 服務取得的服務,以及需要之系結的特定服務。 例如,針對 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);
您可以複製原型,並將其當做範本,在每次將控制碼傳遞至服務 Proxy 時,在用戶端中撰寫函式呼叫的程式碼。 當您完成服務 Proxy 時,請呼叫 WsCloseServiceProxy。