【问题标题】:How to fix Net::ReadTimeout in SOAP API using Savon Ruby gem?如何使用 Savon Ruby gem 修复 SOAP API 中的 Net::ReadTimeout?
【发布时间】:2020-07-14 13:27:42
【问题描述】:

我的脚本有效,但由于某种原因,它抛出 Net::ReadTimeout 错误。我认为是由于与 API 的大量连接。有什么方法可以使用 Savon 来延迟超时?谢谢。

wsdl = 'https://org.my.domain/webservices/myservice.asmx?WSDL'

# Open Client Webservice
client = Savon.client(wsdl: wsdl, ssl_verify_mode: :none, ssl_version: :TLSv1, convert_request_keys_to: :none)

# Connect to Webservice - Authenticate
response = client.call(:authenticate, message: { username: 'user', password: 'pwd', organization: 'org', domain: 'my.domain' })

【问题讨论】:

  • 在询问之前搜索总是有帮助的:stackoverflow.com/questions/6384230/… :-)
  • 谢谢!我最终像@benjessop 建议的那样增加了超时。它导致响应非常慢,但Net::ReadTimeout 没有。

标签: ruby soap rubygems wsdl savon


【解决方案1】:

如果您无法减少对 API 的调用量,您将需要增加读取超时。实际上,您的程序应始终尊重与它们交互的资源,并应允许其他程序访问它们而不影响性能。

如果您确实想增加读取超时,语法将取决于您使用的版本,对于 2.x 版:

client = Savon.client(
    wsdl: wsdl,
    ssl_verify_mode: :none,
    ssl_version: :TLSv1,
    convert_request_keys_to: :none,
    open_timeout: 400,
    read_timeout: 400,
)

对于版本 3.x:

client.http.send_timeout = 400
client.http.receive_timeout = 400

小心这是几秒钟。

【讨论】:

  • 嗨,谢谢@benjessop!是的,你是对的。它需要无限数量的呼叫(同一时间)。调整超时很好,可能会停止收到 NET::ReadTimeout 错误,但响应速度会很慢。我认为这是因为它正在阅读整个 WSDL。您知道是否有办法计算或显示总超时时间吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多