COM(VB/VBA/Script)利用服务标记调用WCF服务
之三使用WSDL契约
LazyBee(http://lazybee.cnblogs.com)
前面我们介绍了使用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
12
mexMonikerString = "service:address='http://localhost/WCFServiceMoniker/Service1.svc'"
13
mexMonikerString = mexMonikerString + ", wsdl='" & wsdlstr & "'"
14
mexMonikerString = mexMonikerString + ", binding=WSHttpBinding_IService1, bindingNamespace='http://tempuri.org/'"
15
mexMonikerString = mexMonikerString + ", contract=IService1, contractNamespace='http://tempuri.org/'"
16
17
' Create the service moniker object
18
Set mexServiceMoniker = GetObject(mexMonikerString)
19
20
' Call the service operations using the moniker object
21
WScript.Echo mexServiceMoniker.SayHello("I am LazyBee, My blog is http://lazybee.cnblogs.com/ ")
22
23
Set mexServiceMoniker = nothing
24
Set xmlhttp=nothing
25
注意:在我们服务标记字符串中,包含服务地址、WSDL、绑定及命名空间、服务契约及命名空间四部分内容。关于如何获得服务地址、绑定及命名空间、服务契约及命名空间请参见前一篇文章COM(VB/VBA/Script)利用服务标记调用WCF服务之二使用MEX契约的第二步
4 保存之后,直接双击运行,你就可以看到运行结果了:

本文的源代码下载地址为:https://files.cnblogs.com/LazyBee/CallWCFService_wsdl.zip
(转载请注明出处:http://lazybee.cnblogs.com)