建立用戶端
在 WWSAPI 中,通過 服務模型 API 和 WsUtil.exe 工具,可以大幅簡化建立 Web 服務的用戶端。 服務模型提供 API,允許用戶端通過 通道 以 C 方法呼叫的形式傳送和接收 訊息。 WsUtil 工具會產生標頭和協助程式來實作用戶端。 這些標頭包含 C 函式的類型和函式原型,代表目標 Web 服務所提供的服務。 協助程式可用來建立服務 Proxy,其中包含服務的系結資訊和 端點位址。
使用 WsUtil 生成標頭檔和輔助程式
若要產生標頭和協助程式,WsUtil 會開啟並讀取目標服務的元數據檔案 - wsdl 和 xsd 檔案,並將其轉換成標頭;因此,您必須事先擷取目標服務的元數據檔案,例如使用 Windows Communication Foundation 的一部分 SvcUtil。 基於安全性考慮,您必須確保這些檔案的複本是可靠的。 (如需詳細資訊,請參閱 WsUtil Compiler Tool 主題中的「Security」一節。)
若要執行 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);
若要建立服務 Proxy 的位址部分,請呼叫 WsOpenServiceProxy,並具有服務 Proxy 的句柄,以及包含您要連線之服務端點位址的 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 時,在用戶端中撰寫函式呼叫的程序代碼。 當您完成服務代理時,請呼叫 WsCloseServiceProxy。