我使用savon 2.2进行SOAP调用。
初始化:
client = Savon.client(
wsdl: SOAP_WSDL,
endpoint: SOAP_URL)
我可以进行这样的SOAP调用,它工作得很好:
resp = client.call(:login, message: { username: SOAP_USER, password: SOAP_PASSWORD })
现在我需要进行另一个调用,该调用需要在SOAP标头中设置一些参数。从salverb.com上的文档中,我发现我应该使用请求方法:
response = client.request :get_user_info do
soap.header = { :session_id => sid }
end
但我收到一个错误,说请求方法不存在:
undefined method `request' for #<Savon::Client:0x007f1560f80490>
我有不同版本的萨文吗??我试着用"呼叫"而不是"请求",但后来我得到了:
ArgumentError - wrong number of arguments (1 for 2):
gem) savon-2.2.0/lib/savon/options.rb:35:in `method_missing'
(gem) savon-2.2.0/lib/savon/block_interface.rb:20:in `method_missing'
app/models/tool.rb:23:in `block in doUpload'
您使用Savon 2.2.0。你应该使用
response = client.call(:get_user_info, :soap_header => { :session_id => sid })
"request"是1.x版本中的方法,不再受支持。
如果使用会话id创建一个新的Savon客户端会怎样?
client = Savon.client(
wsdl: SOAP_WSDL,
endpoint: SOAP_URL,
soap_header: {
"Header" => { "session_id" => sid }
}
)
client.call(:get_user_info, message: data)
或者像这样,对于标头和正文:
@response = @client.call(operation, { :message => message, :soap_header => header })