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

我正在使用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标头中设置一些参数。 从savorb.com上的文档中我发现我应该使用请求方法:

  response = client.request :get_user_info do soap.header = { :session_id => sid } end 

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

 undefined method `request' for # 

我有不同版本的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' 

你在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 })