【问题标题】:Get simple response from SOAP service with classic asp使用经典 asp 从 SOAP 服务获取简单响应
【发布时间】:2010-10-11 10:05:09
【问题描述】:

我的任务是使用经典的 asp 从 SOAP 请求中获取响应。该请求几乎是最基本的——我只需将 3 个参数触发到 Web 服务 URL 并写出响应(采用简单的纯文本格式)。我已经使用几个 SOAP 测试实用程序检查了该服务,它输出的响应很好。

我还阅读了大约 10 个关于在经典 ASP 中使用 SOAP 提要的不同教程,但它们似乎都不起作用。

我正在尝试的最新版本给了我以下代码:

<%
Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP")
oXmlHTTP.Open "POST", "http://www.webservicehost.co.uk/B2bservice.asmx?wsdl", False 

oXmlHTTP.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8" 
oXmlHTTP.setRequestHeader "SOAPAction", "http://ourNameSpace/ourFunction"

SOAPRequest = _
  "<?xml version=""1.0"" encoding=""utf-8""?>" &_
  "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" &_
    "<soap12:Body>" &_
      "<ourFunction xmlns=""http://ourNameSpace/"">" &_
        "<Ccode>OurCode</Ccode>" &_
        "<Pword>1d2s45a</Pword>" &_
        "<OrderNo>9876</OrderNo>" &_
      "</ourFunction>" &_
    "</soap12:Body>" &_
  "</soap12:Envelope>"
oXmlHTTP.send SOAPRequest

response.write oXmlHTTP.responseText
%>

我拥有 POST URL、Ccode、Pword 和 OrderNo 变量的所有正确值,但不知道要为“SoapAction”或值使用什么。结果,当我运行该页面时,我得到了一个错误:

soap:Sender 无法处理没有有效操作参数的请求。请提供有效的肥皂动作。

谁能建议对 SoapAction 和 ourFunction xmlns 值使用什么?

非常感谢您的任何指点...

【问题讨论】:

  • 为什么在 URL 上使用 ?wsdl?那只知道做什么做什么,服务只有http://www.webservicehost.co.uk/B2bservice.asmx

标签: soap asp-classic


【解决方案1】:

您的代码只需进行一些更改即可正常工作

<%
    Response.Write "<br>START<hr>"

    Set oXmlHTTP = CreateObject("Microsoft.XMLHTTP")
    oXmlHTTP.Open "POST", "http://www.crusaderb2b.co.uk/b2bservice.asmx", False 

    oXmlHTTP.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
    oXmlHTTP.setRequestHeader "SOAPAction", "http://crusaderb2b.co.uk/TrackingId"

    SOAPRequest = _
      "<?xml version=""1.0"" encoding=""utf-8""?>" &_
      "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">" &_
        "<soap12:Body>" &_
          "<ourFunction xmlns=""http://ourNameSpace/"">" &_
            "<Ccode>OurCode</Ccode>" &_
            "<Pword>1d2s45a</Pword>" &_
            "<OrderNo>9876</OrderNo>" &_
          "</ourFunction>" &_
        "</soap12:Body>" &_
      "</soap12:Envelope>"

    oXmlHTTP.send SOAPRequest    
    Response.Write oXmlHTTP.responseText

    Response.Write "<br>END<hr>"
%>

变化是

  • 删除?wdsl
  • 更改内容类型
  • 方法调用需要与 Web 服务的服务器相同,因为它是方法名称

添加

我在您提供 Web 服务时更改了代码。您在服务页面中所需要的一切如下:

original image here

用上面的代码回答:

【讨论】:

  • 感谢 Balexandre,这让我更进一步。我现在收到一条错误消息:“soap:ClientServer 无法识别 HTTP Header SOAPAction 的值:http://www.webservicehost.co.uk/B2bservice。” (没有空格 - 我只是添加了这些以防止此编辑器解析 URL)我不确定方法名称是/应该是什么?
  • 什么是正确的服务URL和调用方式?所以我可以给你一个活生生的例子
  • 您可以在此处查看stackoverflow.com/editing-help 如何使用编辑框,例如,只需用反引号将其包裹起来
  • 我知道网络服务的 URL,但不知道调用方法是什么。这是我需要联系 SOAP 提要提供者的事情吗?对不起,如果这是一个愚蠢的问题,这对我来说只是很新。
  • WDSL 会告诉你所有这些,存在哪些方法以及你需要相互传递什么,如果 web 服务是在 .NET 中创建的,.asmx 页面将具有以下内容:@ 987654323@ 这样您就可以点击每个method 并查看您需要通过什么以及您将收到什么。这就是 WDSL 的全部意义所在。 要使用 Web 服务,您需要知道端点(URL)和要使用的方法,如果像您正在做的那样通过hand 做所有事情,您还需要知道要发送什么和收到答案后服务器会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多