
----INDEX---- 1. soap请求方式 2. post请求方式 3. SHOWALLNODE函数(关于节点各属性和数据显示) --------------------- 一.SOAP请求示例 下面是个 SOAP 请求示例。所显示的占位符需要由实际值替换。 POST /WebService1/UserSignOn.asmx HTTP/1.1 Host: 192.100.100.81 Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/LoginByAccount"
string string
为了和WEBSERVICE交互,需要构造一个和上完全相同的SOAP请求: <% url = "http://192.100.100.81/WebService1/UserSignOn.asmx"
SoapRequest=""& _ ""xmlns:xsd="&CHR(34)&"http://www.w3.org/2001/XMLSchema"&CHR(34)&" "& _ "xmlns:soap="&CHR(34)&"http://schemas.xmlsoap.org/soap/envelope/"&CHR(34)&">"& _ ""& _
""& _ ""&username&""& _ ""&password&""& _ ""& _
""& _ ""
Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP") xmlhttp.Open "POST",url,false xmlhttp.setRequestHeader "Content-Type", "text/xml;charset=utf-8" xmlhttp.setRequestHeader "HOST","192.100.100.81" xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest) xmlhttp.setRequestHeader "SOAPAction", "http://tempuri.org/LoginByAccount" ‘一定要和WEBSERVICE的命名空间相同,否则服务会拒绝 xmlhttp.Send(SoapRequest) ‘这样就利用XMLHTTP成功发送了和SOAP示例所符的SOAP请求. ‘检测一下是否成功: Response.Write xmlhttp.Status&” ” Response.Write xmlhttp.StatusText Set xmlhttp = Nothing %> 假如成功会显示200 ok,不成功会显示 500 内部服务器错误〿 Connection: keep-alive . 成功后就能够利用WEBSERVICE的响应,如下: SOAP响应示例 下面是个 SOAP 响应示例。所显示的占位符需要由实际值替换。 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length
string
这是和刚才SOAP请求示例所对应的SOAP响应示例,在成功发送请求后,就能够查看该响应 : If xmlhttp.Status = 200 Then
Set xmlDOC =server.CreateObject("MSXML.DOMDocument") xmlDOC.load(xmlhttp.responseXML) xmlStr = xmlDOC.xml Set xmlDOC=nothing xmlStr = Replace(xmlStr,"<","<") xmlStr = Replace(xmlStr,">",">") Response.write xmlStr Else
Response.Write xmlhttp.Status&" " Response.Write xmlhttp.StatusText
End if 请求正确则给出完整响应,请求不正确(如账号,密码不对)响应的内容就会信息不完整. 取出响应里的数据,如下: If xmlhttp.Status = 200 Then
Set xmlDOC = server.CreateObject("MSXML.DOMDocument") xmlDOC.load(xmlhttp.responseXML) Response.Write xmlDOC.documentElement.selectNodes("//LoginByAccountResult")(0).text ‘显示节点为LoginByAccountResult的数据(有编码则要解码) Set xmlDOC = nothing
Else
Response.Write xmlhttp.Status&" " Response.Write xmlhttp.StatusText
End if
显示某节点各个属性和数据的FUNCTION:
Function showallnode(rootname,myxmlDOC)望大家不断完鄯 2005-1-9 writed by 844 if rootname<>"" then
set nodeobj=myxmlDOC.documentElement.selectSingleNode("//"&rootname&"")当前结点对像 nodeAttributelen=myxmlDOC.documentElement.selectSingleNode("//"&rootname&"").attributes.length当前结点属性数
returnstring=returnstring&" 节点名称:"&rootname
if nodeobj.text<>"" then returnstring=returnstring&" 节点的文本:("&nodeobj.text&")" end if
returnstring=returnstring&" { "
if nodeAttributelen<>0 then returnstring=returnstring&" 属性数有 "&nodeAttributelen&" 个,分别是:" end if
for i=0 to nodeAttributelen-1 returnstring=returnstring&" "&nodeobj.attributes(i).Name&": "&nodeobj.getAttribute(nodeobj.attributes(i).Name)&" " next
if nodeobj.childNodes.Length<>0 then if nodeobj.hasChildNodes() and lcase(nodeobj.childNodes.item(0).nodeName)<>"#text" then是否有子节点 set childnodeobj=nodeobj.childNodes childnodelen=nodeobj.childNodes.Length returnstring=returnstring&"
有 "&childnodelen&" 个子节点; 分别是: " for i=0 to childnodelen-1 returnstring=returnstring&" "&childnodeobj.item(i).nodeName&"" next end if end if
returnstring=returnstring&" } " response.write returnstring set nodeobj=nothing end if End Function 能够这样用: If xmlhttp.Status = 200 Then
Set xmlDOC = server.CreateObject("MSXML.DOMDocument") xmlDOC.load(xmlhttp.responseXML) showallnode "LoginByAccountResponse",xmlDOC’调用SHOWALLNODE Set xmlDOC = nothing
Else
Response.Write xmlhttp.Status&" " Response.Write xmlhttp.StatusText
End if
二.POST请求示例 HTTP POST 下面是个 HTTP POST 请求示例。所显示的占位符需要由实际值替换。 POST /WebService1/UserSignOn.asmx/LoginByAccount HTTP/1.1 Host: 192.100.100.81 Content-Type: application/x-www-form-urlencoded Content-Length: length
username=string&password=string 构造POST请求: <% url = "http://192.100.100.81/WebService1/UserSignOn.asmx/LoginByAccount"
SoapRequest="username="&username&"&password="&password
Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP") xmlhttp.Open "POST",url,false xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"’注意 xmlhttp.setRequestHeader "HOST","192.100.100.81" xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest)
xmlhttp.Send(SoapRequest) ‘这样就利用XMLHTTP成功发送了和HTTP POST示例所符的POST请求. ‘检测一下是否成功: Response.Write xmlhttp.Status&” ” Response.Write xmlhttp.StatusText Set xmlhttp = Nothing %> 假如成功会显示200 ok,不成功会显示 500 内部服务器错误〿 Connection: keep-alive . 成功后就能够利用WEBSERVICE的响应,如下: HTTP POST 下面是个 HTTP POST 响应示例。所显示的占位符需要由实际值替换。 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length
string
显示: If xmlhttp.Status = 200 Then
Set xmlDOC = server.CreateObject("MSXML.DOMDocument") xmlDOC.load(xmlhttp.responseXML) showallnode "string",xmlDOC调用SHOWALLNODE Set xmlDOC = nothing
Else
Response.Write xmlhttp.Status&" " Response.Write xmlhttp.StatusText
End if
以上是ASP用XMLHTTP组件发送SOAP请求,调用WEBSERVICE的方法,本人推荐在ASP环境下使用第一种方法,假如有更好的方法请联系本人mailto:lyq8442002@msn.com .使用HTTP GET的方式假如有中文会出问题,数据量又不大。用HTTP POST的方法感觉多此一举,其实上面的例子就是用POST的方式,只但是不是用POST的请求。用SOAP TOOLKIT要装软件,而且已没有后继版本。---全文完
|