2011-01-28 3 views
1

おそらく私はsavonの慣用コードを書いていないので、私をまっすぐにしても構いませんが、wsse認証を使用したSavonでは、nonceトークンが後続のリクエストで再利用される

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番目の要求はナンスを再利用して終了します。 wseseノンスのポイントは、それを一度だけ使用することです。私が呼んでいるサービスは、私がそれを再利用したと不満を持ち、リクエストを処理することを拒否します。私の最初の考えは、タイムスタンプを追加することでしたが、それは役に立たなかった。実際、ソースコードは、設定されている場合はnonceが使用され、以前に設定されていない場合にのみ生成されることを示しています。

明らかに、私は新しいクライアントを作成することができますが、それはかなり重い操作であり、同じクライアントから複数の要求を作成する通常の方法ではないようです。

現実的な回避策はありますか?

答えて

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 
関連する問題