【问题标题】:cannot set SOAP header parameters on savon call无法在 savon 调用上设置 SOAP 标头参数
【发布时间】:2013-08-30 05:41:23
【问题描述】:

我正在使用 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'

【问题讨论】:

    标签: ruby-on-rails soap savon


    【解决方案1】:

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

    @response = @client.call(operation, { :message => message, :soap_header => header })
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-18
          • 2012-11-02
          • 2020-09-28
          • 2018-10-26
          相关资源
          最近更新 更多