3

您好,我正在测试一些 Web 服务,并且正在尝试使用 SAVON 和我的 WSDL 编写客户端。我有一个名为 log_process 的可用操作,我正在尝试访问它但遇到错误。我有一个用 PHP 编写的类似脚本,它运行良好。我努力了

require 'net/http'
require "uri"
require 'savon' 

client = Savon.client(wsdl: "http://somedomain.com/projects/shared/abc.wsdl")

@a=client.operations

puts @a
    
ary={0 =>"art", 1 =>"bac", 2 =>"arr"}
   
@result = client.call(:log_process, message:{0 =>"asdf", 1 =>"qwer", 2 =>"arr"})
puts @result

并出现以下错误

raise_soap_and_http_errors!': (SOAP-ENV:Client) 错误请求 (Savon::SOAPFault)

我的 php 工作解决方案看起来像这样

$result = $client->log_process(array(0=>$user_name,1=>$user_pwd,2=>$display_type));

知道与此等效的红宝石是什么,还是我以正确的方式调用该操作?

4

2 回答 2

2

我知道这已经晚了,但是我在尝试使用 savon 向我使用 PHP Soap 服务器广泛使用的肥皂服务器设置肥皂请求时遇到了完全相同的问题。我发现了另一篇与此相关的帖子,似乎添加message_tag选项修复了它。

这是因为在我的情况下,WSDL 期望functionNameRequest在 xml 中,但 savon 因为只有funcionName 通过设置发送message_tagfunctionNameRequest>soap 服务器才能正确映射正在请求的函数。

这是帮助我解决问题的线程https://github.com/savonrb/savon/issues/520 下面引用的相关代码:

嗨,我只是分享这个,以防它有用。

我正在使用 savon 2.3.0,我猜 gem 在从我的 wsdl 中自动识别参数时遇到了一些问题。我对 SOAP 一无所知,这是我第一次真正使用它。

我正在处理 TradeTracker 的 WSDL

使用以下代码,我得到了它的工作:

client = Savon.client do
  wsdl "http://ws.tradetracker.com/soap/affiliate?wsdl"
  namespace_identifier :ns1
end

credentials = {
  customerID: 123123,
  passphrase: "123123123"
}

response = client.call(:authenticate, message_tag: :authenticate, message: credentials)
于 2014-11-03T04:54:24.903 回答
1

尝试:

@result = client.call(:log_process, message:["asdf", "asg", "arr"]) 

在 PHP 代码中,您只发送 1 个参数,它是一个数组

于 2013-07-18T16:50:47.643 回答