系列第三篇介紹 **WSDL 契約** 服務專用字串:當服務端為安全考量關閉 MEX 端點、或無法部署 Proxy 組件時,透過 HTTP GET 取得 WSDL 內容,動態建立通道調用 WCF。無需註冊類型、無需 GAC、無需 MEX,適合極度受限的 COM 環境 (如舊版 Office 巨集、純腳本環境)。
WCF 服務 IService1 / Service1、wsHttpBinding、https://localhost/WCFServiceMoniker/Service1.svc、MEX 端點可選。本篇重點在**客戶端腳本取得 WSDL 並構建專用字串**。
' CallWCFService_wsdl.vbs
'---------------------------------------------------------------
' WSDL service moniker example
'---------------------------------------------------------------
' 1. 以 XMLHTTP 同步下載 WSDL 內容
Set xmlhttp = CreateObject("Msxml2.XMLHTTP")
xmlhttp.open "GET", "https://localhost/WCFServiceMoniker/Service1.svc?wsdl", False
xmlhttp.send
wsdlstr = xmlhttp.responseText
' 2. 構建服務專用字串:四大必要元素
mexMonikerString = "service:address='https://localhost/WCFServiceMoniker/Service1.svc'"
mexMonikerString = mexMonikerString + ", wsdl='" & wsdlstr & "'"
mexMonikerString = mexMonikerString + ", binding=WSHttpBinding_IService1, bindingNamespace='https://tempuri.org/'"
mexMonikerString = mexMonikerString + ", contract=IService1, contractNamespace='https://tempuri.org/'"
' 3. 建立專用字串物件並調用
Set mexServiceMoniker = GetObject(mexMonikerString)
WScript.Echo mexServiceMoniker.SayHello("I am LazyBee, My blog is https://lazybee.cnblogs.com/")
Set mexServiceMoniker = Nothing
Set xmlhttp = Nothing
| 參數 | 來源 | 說明 |
|---|---|---|
address | 服務 .svc URL | 實際通訊端點 |
wsdl | HTTP GET ?wsdl 回傳 XML | 完整 WSDL 文檔字串,**單引號包裹**,內部單引號需轉義 |
binding / bindingNamespace | WSDL <wsdl:binding name="..."> | 繫結名稱與命名空間,區分大小寫 |
contract / contractNamespace | WSDL <wsdl:portType name="..."> | 契約名稱與命名空間,區分大小寫 |
關鍵提示:若服務未自訂命名空間,預設均為 https://tempuri.org/。從 WSDL 或 MEX 端點檢視可確認實際值。

圖 1:VBScript 執行成功,顯示服務回應
| 維度 | 類型化契約 | MEX 契約 | WSDL 契約 |
|---|---|---|---|
| 需 .NET Framework | 是 (產生 Proxy) | 否 | 否 |
| 需註冊組件 (Regasm/GAC) | 是 | 否 | 否 |
| 需服務端 MEX 端點 | 否 | 是 | 否 |
| 需手動取得 WSDL | 否 | 否 | 是 (XMLHTTP 下載) |
| 支援設定檔繫結參數 | 是 | 否 | 否 |
| 型別安全/編譯期檢查 | 完整 | 執行期 | 執行期 |
| 適用環境 | 標準 .NET/COM 混合 | 無 .NET、有 MEX | 無 .NET、無 MEX、極度受限 |
wsdl='file://path' 語法 (需測試支援度)wsHttpBinding 的那個WSDL 契約專用字串提供 **零部署、無 MEX 依賴、無 .NET 運行時** 的 WCF 調用路徑,代價是需手動構建包含完整 WSDL XML 的專用字串。適合:
下一篇將總結全系列四種契約模式的選型決策樹。