无法在savon调用上设置SOAP标头参数

Ya.*_*Ya. 5 soap ruby-on-rails savon

我正在使用savon 2.2进行SOAP调用.

初始化:

  client = Savon.client(
  wsdl: SOAP_WSDL,
  endpoint: SOAP_URL)
Run Code Online (Sandbox Code Playgroud)

我可以这样做一个SOAP调用,它工作正常:

resp =  client.call(:login, message: { username: SOAP_USER, password: SOAP_PASSWORD })
Run Code Online (Sandbox Code Playgroud)

现在我需要进行另一个调用,这需要在SOAP标头中设置一些参数.从savorb.com上的文档中我发现我应该使用请求方法:

 response = client.request :get_user_info do
    soap.header = { :session_id => sid }
 end 
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误,说请求方法不存在:

undefined method `request' for #<Savon::Client:0x007f1560f80490>
Run Code Online (Sandbox Code Playgroud)

我有不同版本的savon或者什么?我尝试使用"call"而不是"request",但后来我得到了:

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'
Run Code Online (Sandbox Code Playgroud)

Ste*_*ler 8

你在Savon 2.2.0上.你应该用

response = client.call(:get_user_info, :soap_header => { :session_id => sid })
Run Code Online (Sandbox Code Playgroud)

'request'是版本1.x中的方法,不再受支持.


zwi*_*pie 1

如果您使用会话 ID 创建一个新的 Savon 客户端会怎样?

client = Savon.client(
  wsdl: SOAP_WSDL,
  endpoint: SOAP_URL,
  soap_header: {
    "Header" => { "session_id" => sid }
  }
)

client.call(:get_user_info, message: data)
Run Code Online (Sandbox Code Playgroud)