6

我正在尝试使用 ruby​​ 和 Savon 来使用 Web 服务。

测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2

需要“红宝石”
需要'savon'

客户端 = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL"
client.get_quote 做 |soap|
  soap.body = {:symbol => "AAPL"}
结尾

它返回一个 SOAP 异常。检查肥皂信封,在我看来,肥皂请求没有正确的命名空间。

谁能建议我可以做些什么来完成这项工作?我对其他 Web 服务端点也有同样的问题。

谢谢,

4

2 回答 2

6

这是 Savon 处理命名空间的方式的问题。查看此答案为什么在使用 savon 进行 ruby​​ soap 通信时将“wsdl”命名空间插入到操作名称中?

您可以通过专门调用soap.input并将其传递给数组来解决此问题,第一个元素是方法,第二个元素是包含命名空间的哈希

require 'rubygems'
require 'savon'

client = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL"
client.get_quote do |soap| 
  soap.input = [ 
    "GetQuote", 
    { "xmlns" => "http://www.webserviceX.NET/" } 
  ]
  soap.body = {:symbol => "AAPL"} 
end
于 2010-08-10T22:47:01.567 回答
2

您可能会发现最新的 gem 使用方法“request”,然后是对所需方法的符号引用。

require 'rubygems'
require 'savon'

client = Savon::Client.new "http://www.webservicex.net/stockquote.asmx?WSDL"
client.request :get_quote do |soap| 
    soap.input = [ 
    "GetQuote", 
    { "xmlns" => "http://www.webserviceX.NET/" } 
    ]
    soap.body = {:symbol => "AAPL"} 
end
于 2012-10-12T08:52:17.550 回答