6

我正在使用 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::Client:0x007f1560f80490>

我有不同版本的 savon 还是什么?我尝试使用“呼叫”而不是“请求”,但后来我得到:

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'
4

3 回答 3

9

您使用的是 Savon 2.2.0。你应该使用

response = client.call(:get_user_info, :soap_header => { :session_id => sid })

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

于 2013-08-28T14:37:58.517 回答
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)
于 2013-08-27T14:53:57.003 回答
1

或者像这样,对于标题和正文:

@response = @client.call(operation, { :message => message, :soap_header => header })
于 2017-05-17T14:47:27.480 回答