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要装软件,而且已没有后继版本。---全文完
  • 相关阅读:
    python 正则表达式
    python -- 程序异常与调试(程序调试)
    python -- 程序异常与调试(异常处理)
    python -- 程序异常与调试(识别异常)
    python -- 日期与时间
    python -- 模块与类库
    python -- 面向对象编程(继承、重写)
    python -- 面向对象编程(属性、方法)
    python -- 面向对象编程(类、对象)
    python -- 函数
  • 原文地址:https://www.cnblogs.com/shf/p/433880.html
Copyright © 2011-2022 走看看