В Savon с аутентификацией wsse мой одноразовый токен повторно используется при последующих запросах - PullRequest
1 голос
/ 28 января 2011

Возможно, я просто не пишу идиоматический код для 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

.второй запрос заканчивается повторным использованием одноразового номера.Смысл одноразового использования заключается в том, чтобы использовать его только один раз, поэтому служба, на которую я звоню, жалуется, что я повторно использовала ее, и отказывается обслуживать запрос.Моей первой мыслью было добавить метку времени, но это не помогло;на самом деле, исходный код показывает, что одноразовый номер используется, если он установлен, и генерируется только в том случае, если он не был установлен ранее.

Очевидно, что при необходимости я могу создать нового клиента, но это довольно тяжелая операция икажется маловероятным нормальный способ создания нескольких запросов от одного и того же клиента.

Есть ли разумное решение?

1 Ответ

0 голосов
/ 28 января 2011

Это заставляет меня чувствовать себя грязно, но если никто не может предложить лучшую альтернативу, это делает трюк:

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

r1=client.request(:company_get_report_suites) do
  wsse.reset_nonce
end
...