zoukankan      html  css  js  c++  java
  • asp调用WEBSERVICE

    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"

    <?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>
        <LoginByAccount xmlns="http://tempuri.org/">
          <username>string</username>
          <password>string</password>
     </LoginByAccount>
      </soap:Body>
    </soap:Envelope>
    为了与WEBSERVICE交互,需要构造一个与上完全相同的SOAP请求:
    <%
    url = "http://192.100.100.81/WebService1/UserSignOn.asmx"

    SoapRequest="<?xml version="&CHR(34)&"1.0"&CHR(34)&" encoding="&CHR(34)&"utf-8"&CHR(34)&"?>"& _
    "<soap:Envelope xmlns:xsi="&CHR(34)&"http://www.w3.org/2001/XMLSchema-instance"&CHR(34)&" "& _
    "xmlns:xsd="&CHR(34)&"http://www.w3.org/2001/XMLSchema"&CHR(34)&" "& _
    "xmlns:soap="&CHR(34)&"http://schemas.xmlsoap.org/soap/envelope/"&CHR(34)&">"& _
    "<soap:Body>"& _

    "<LoginByAccount xmlns="&CHR(34)&"http://tempuri.org/"&CHR(34)&">"& _
    "<username>"&username&"</username>"& _
    "<password>"&password&"</password>"& _
    "</LoginByAccount>"& _

    "</soap:Body>"& _
    "</soap:Envelope>"

    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&”&nbsp;”
    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

    <?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>
        <LoginByAccountResponse xmlns="http://tempuri.org/">
          <LoginByAccountResult>string</LoginByAccountResult>
        </LoginByAccountResponse>
      </soap:Body>
    </soap:Envelope>
    这是与刚才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,"<","&lt;")
    xmlStr = Replace(xmlStr,">","&gt;")
    Response.write xmlStr
    Else

    Response.Write xmlhttp.Status&"&nbsp;"
    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&"&nbsp;"
    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&"<BR>节点名称:"&rootname

    if nodeobj.text<>"" then
    returnstring=returnstring&"<BR>节点的文本:("&nodeobj.text&")"
    end if

    returnstring=returnstring&"<BR>{<BR>"

    if nodeAttributelen<>0 then
    returnstring=returnstring&"<BR>属性数有&nbsp; "&nodeAttributelen&" 个,分别是:"
    end if

    for i=0 to nodeAttributelen-1
    returnstring=returnstring&"<li>"&nodeobj.attributes(i).Name&":&nbsp;"&nodeobj.getAttribute(nodeobj.attributes(i).Name)&" </li>"
    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&"<BR><BR>有 "&childnodelen&" 个子节点;<BR>分别是: "
    for i=0 to childnodelen-1
    returnstring=returnstring&"<li>"&childnodeobj.item(i).nodeName&"</li>"
    next
    end if
    end if

    returnstring=returnstring&"<BR>}<BR>"
    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&"&nbsp;"
    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&”&nbsp;”
    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

    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://tempuri.org/">string</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&"&nbsp;"
    Response.Write xmlhttp.StatusText

    End if


    以上是ASP用XMLHTTP组件发送SOAP请求,调用WEBSERVICE的方法,本人推荐在ASP环境下使用第一种方法,如果有更好的方法请联系本人mailto:lyq8442002@msn.com .使用HTTP GET的方式如果有中文会出问题,数据量又不大。用HTTP POST的方法感觉多此一举,其实上面的例子就是用POST的方式,只不过不是用POST的请求。用SOAP TOOLKIT要装软件,而且已没有后继版本。---全文完
  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/shf/p/433880.html
Copyright © 2011-2022 走看看