我尝试连接到已使用PHP NuSoap库设置的远程SOAP服务。我使用Ruby Savon客户端进行连接。
访问服务的WDSL地址(http://example.com/api/webservice.php?wdsl)会提供有关我尝试使用的终点的以下信息:
LINQ
像这样设置我的Savon客户端:
Name: addsubscription
Binding: webserviceBinding
Endpoint: http://www.example.com/api/webservice.php
SoapAction: http://www.example.com/api/webservice.php/addsubscription
Style: rpc
Input:
use: encoded
namespace:
encodingStyle: http://schemas.xmlsoap.org/soap/encoding/
message: addsubscriptionRequest
parts:
Output:
use: encoded
namespace:
encodingStyle: http://schemas.xmlsoap.org/soap/encoding/
message: addsubscriptionResponse
parts:
Namespace:
Transport: http://schemas.xmlsoap.org/soap/http
Documentation:
然后尝试拨打'添加订阅'方法:
client = Savon::Client.new(wsdl: "http://www.example.com/api/webservice.php?wdsl")
在日志中给出以下错误 -
response = client.call(:addsubscription) do
message my_hash_of_stuff
end
像这样设置客户端:
Savon::UnknownOperationError: Unable to find SOAP operation: :addsubscription
Operations provided by your service: []
然后运行与上面相同的调用会引发 Savon :: SOAPFault 错误,我假设这是由于缺少名称空间属性(我不确定如何从此错误中进一步调试/收集信息)?
根据以上信息,我应该如何配置Savon客户端连接到此服务?
修改:
像这样设置客户端 -
client = Savon.client do
endpoint "http://www.example.com/api/webservice.php"
namespace ''
end
然后调用(使用填充的message_hash var)
client = Savon.client(namespace: '', endpoint: 'http://www.example.com/api/webservice.php')
吐出以下错误:
response = client.call(:addsubscription,
message: message_hash)
答案 0 :(得分:0)
看起来你正在使用过时的Savon版本< 2.x版本我建议升级到2.x版(我写的是2.11.1)。随着v2的引入,界面发生了很大的变化。
最小的实现可能如下所示:
require 'savon'
WSDL = 'http://www.example.com/api/webservice.php?wdsl'
client = Savon.client(wsdl: WSDL,
log: true,
log_level: :debug,
pretty_print_xml: true)
response = client.call(:addsubscription,
message: my_hash_of_stuff)
print response.to_hash