前面我們介紹了使用MEX契約的服務標記在COM中調用WCF服務,這種方式是通過MEX終結點動態取得元 數據,使用起來是比較方便;但是有時服務的元數據中可能包含惡意用戶可以利用的關於應用程序的敏感 信息,也就是說為了安全考慮有些服務可能不會通過MEX公布元數據信息。如果哦某些服務沒有公布元數 據信息,用類型化有比較麻煩,針對這種情況我們該如何在COM中調用WCF服務呢?這時我們可以使用WSDL 契約來進行WCF服務的調用,使用這種方式和使用MEX類似,同樣不需要進行類型的注冊,信息都是通過動 態得到,不過有一個不好的地方就是需要使用其他手段來取得服務的WSDL描述。好了,下面就讓我們開始 第一步:創建WCF服務 這個和上一篇的完全一樣,具體請參見COM(VB/VBA/Script)利用服務標記調用 WCF服務之一使用類型化契約的第一步,如果您曾經按照上一篇文章做過相應的測試,你就可以直接使用 已經建好的服務了。 第二步:在Script中調用WCF服務
1:下面就是創建我們的Script文件了,我們起名為CallWCFService_wsdl.vbs,內容如下:
1'--------------------------------------------------------------- 2' WSDL service moniker example 3'--------------------------------------------------------------- 4 5 Set xmlhttp=CreateObject("Msxml2.XMLHTTP") 6 call xmlhttp.open("GET","http://localhost/WCFServiceMoniker/Service1.svc?wsdl",false) 7 xmlhttp.send 8 'MsgBox message will be truncated, but wscript.echo will not. 9 'wscript.echo xmlhttp.responseText 10 wsdlstr=xmlhttp.responseText 11 12mexMonikerString = "service:address='http://localhost/WCFServiceMoniker/Service1.svc'" 13mexMonikerString = mexMonikerString + ", wsdl='" & wsdlstr & "'" 14mexMonikerString = mexMonikerString + ", binding=WSHttpBinding_IService1, bindingNamespace='http://tempuri.org/'" 15mexMonikerString = mexMonikerString + ", contract=IService1, contractNamespace='http://tempuri.org/'" 16 17' Create the service moniker object 18Set mexServiceMoniker = GetObject(mexMonikerString) 19 20' Call the service operations using the moniker object 21WScript.Echo mexServiceMoniker.SayHello("I am LazyBee, My blog is http://lazybee.cnblogs.com/ ") 22 23Set mexServiceMoniker = nothing 24Set xmlhttp=nothing 25
注意:在我們服務標記字符串中,包含服務地址、WSDL、綁定及命名空間、服務契約及命名空間四部 分內容。關於如何獲得服務地址、綁定及命名空間、服務契約及命名空間請參見前一篇文章COM (VB/VBA/Script)利用服務標記調用WCF服務之二使用MEX契約的第二步
4 保存之後,直接雙擊運行,你就可以看到運行結果了:
出處:http://lazybee.cnblogs.com
本文配套源碼:http://www.bianceng.net/dotnet/201212/757.htm