asp,vbs调webservice

来源:互联网 发布:最新灯光矩阵 编辑:程序博客网 时间:2024/05/22 04:32

工作中总会遇上一些你不想去碰,但又不得不解决的问题,比如vbs调webservice

 

SET SSO = Server.CreateObject("MSSOAP.SoapClient30")
SSO.ClientProperty("ServerHTTPRequest") = True
Call SSO.mssoapinit("http://127.0.0.1/common/SSO.asmx?WSDL")
返回值=SSO.CheckToken(参数一,参数二)


http://127.0.0.1/common/SSO.asmx?WSDL为webservice地址
SSO.CheckToken为webservice方法

 

这里用了SoapClient30,是要下载一个soap toolkit 3.0 这个玩意MS已经不提供技术支持

 

上次是种标准写法,但我发现好像网上所有人调用webserive时都不会用到复杂参数一样,事实上,脚本用SoapClient30,是不支持类,结构体的,只支持元数据,这个问题网上问的人一堆,解决的没有。

 

但是如果方法参数只是一个类的话,还可变通一下,比如参数是类a,属性i,k,

那你可以这样写

返回值=SSO.CheckToken("<i>dfd</i><k>545</k>")

复杂一点的

 返回值=SSO.CheckToken("<i>dfd</i><k><l>dfdf</l></k>")都行

但是如果方法有两个参数,是两个类就不行了。其实他就是把xml的根省去,不用你写了,所以它不支持你的参数xml有两个根。

 

但是如果你的webservice方法里面返回值是个类或方法,那就傻差了,因为会返回一个对象,但脚本语言无法去解析它,你去

点属性会报错的,我试过N种方法都不行,发现弱类型语言是不行的。

 

但强型语言是可以的,你可以定义一个类,如class1 再 class1 a = SSO.CheckToken(new class2())

这样都行的,但我只看到例子,没有试过,搜索关键字是 customer type mapper,mapper,主要是看帮助啦,虽然都是英文的。

 

所以在实在没有办法的时候,我们只能用原始办法

 

data="<?xml version=""1.0"" encoding=""utf-8""?>"& _
"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"& _
"  <soap:Body>"& _
"    <HelloWorld xmlns=""http://tempuri.org/"">"& _
"      <b>"  & _
"      <k>8</k>"& _
"        <r>5</r>"& _
"      </b>"& _
"    </HelloWorld>"& _
"  </soap:Body>"& _
"</soap:Envelope>"

Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Set xmlDOC =CreateObject("Microsoft.XMLDOM")

strWebserviceURL="http://localhost:2765/Service1.asmx"
objHTTP.Open "POST", strWebserviceURL, False
objHTTP.SetRequestHeader "Content-Type", "text/xml; charset=utf-8"
objHTTP.SetRequestHeader "Host", "localhost"
objHTTP.setRequestHeader "Content-Length",LEN(data)
objHTTP.SetRequestHeader "SOAPAction","http://tempuri.org/HelloWorld"
length=len(data)
objHTTP.Send(data)
'msgbox(objHTTP.responseText)
xmlDOC.load(objHTTP.responseXML)
Set ReStr=xmlDOC.documentElement.selectNodes("//k")
msgbox(ReStr(0).Text)
set objHTTP=nothing
set xmlDOC = nothing

 

这个例子绝对跑成功,网上也有很多例子,不过都有毛病。

原创粉丝点击