1

也许我只是没有为 savon 编写惯用代码,所以请随时纠正我,但我试图在同一个客户端上发出多个请求,如

client=Savon::Client.new {
  wsdl.document=wsdl_path
}

r1=client.request(:company_get_report_suites) do
  wsse.credentials APP_CONFIG['omniture']['username'],APP_CONFIG['omniture']['shared_secret'],:digest
end

r2=client.request(:scheduling_get_reports_run_history) do
  wsse.credentials APP_CONFIG['omniture']['username'],APP_CONFIG['omniture']['shared_secret'],:digest
end

第二个请求最终重用了 nonce。wsse nonce 的要点是只使用一次,所以我调用的服务抱怨我已经重用它并拒绝为请求提供服务。我的第一个想法是添加时间戳,但这并没有帮助;实际上,源代码显示,如果设置了随机数,则使用该随机数,并且仅在先前未设置时才生成。

显然,如果必须,我可以创建一个新客户端,但这是一个相当繁重的操作,似乎不太可能是从同一个客户端创建多个请求的正常方式。

有没有合理的解决方法?

4

1 回答 1

0

这让我觉得很脏,但如果没有人能提出更好的选择,这就是诀窍:

class Savon::WSSE
  def reset_nonce
    @nonce=nil
    @nonce=nonce
  end
end

r1=client.request(:company_get_report_suites) do
  wsse.reset_nonce
end
于 2011-01-28T00:50:11.810 回答