1

おそらく、私はサボンの慣用的なコードを書いていないだけなので、お気軽に私を正してください.

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

2 番目の要求は、ノンスを再利用することになります。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 に答える