首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >savon ruby最佳实践-全球客户端还是每个请求一个?

savon ruby最佳实践-全球客户端还是每个请求一个?
EN

Stack Overflow用户
提问于 2013-11-14 06:09:31
回答 1查看 617关注 0票数 1

我让Savon在Sinatra ruby应用程序中工作。应用程序将被频繁调用,我不想太依赖服务器。

在我看来,每次命中/test_savon GET时,我都会去服务器再次请求wdsl。看起来,我只需要做一次。

我是否应该创建几个客户端作为ruby全局变量(每个wsdl一个)并重复使用它们?

这是我的代码,它可以工作: NTLM auth -对话MS DynamicsNav服务器

代码语言:javascript
复制
get '/test_savon' do
  # create a client for the service
  client = Savon.client(wsdl: 'http://somedynamicsnavserver:7047/WS/Page/Salesperson', ntlm: ["username", "password"])  do
    convert_request_keys_to :camelcase  
  end
  operations = client.operations
  puts "operations are #{operations.to_s}" if operations
  puts "checked operations" if operations

  # => [:find_user, :list_users]

  # call the 'findUser' operation
  response = client.call(:read, message: { code: 'salepersonIDhere' })
  puts "response is #{response.to_s}" if response

  response.body.to_s
  # => {:read_result=>{:salesperson=>{:key=>"aKey", :code=>"salepersonIDhere", :name=>"Jim Kirk", :global_code=>"X", :phone_no=>"4407"}, :@xmlns=>"urn:microsoft-dynamics-schemas/page/salesperson"}}
end
EN

回答 1

Stack Overflow用户

发布于 2013-11-15 05:27:29

我通常根本不使用WSDL,但在没有它的情况下工作。这应该会快得多,因为你应该有更少的往返。下面是一个小示例:

代码语言:javascript
复制
#!ruby

gem "savon", "~>2.0"
require 'savon'

stock_handle = ARGV[0] || 'OTEX'

client = Savon.client( 
  endpoint: 'http://www.webservicex.net/stockquote.asmx',
  namespace: 'http://www.webserviceX.NET/',
  convert_request_keys_to: :camelcase, # :camelcase, :upcase, :none
  log: true,
  log_level: :debug,
  pretty_print_xml: true
)

response = client.call(
  :get_quote,
  soap_action: 'http://www.webserviceX.NET/GetQuote',
  message: { "wsdl:symbol" => stock_handle}
)

print response.to_hash
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19965435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档