天天看点

SOAP及Web Services

我们可以通过SOAP服务器来访问预先定义好的对象,通过soap/rpc/driver就可做到,这也可以看作是同其他语言交互的一种很好的方式,服务器端存为server.rb

require 'soap/rpc/standaloneServer'

class InterestCalculator

  attr_reader :call_count

  def initialize

    @call_count=0

  end

  def compound(printcipal,rate,freq,years)

    @call_count+=1

    printcipal*(1.0+rate/freq)**(freq*years)

end

NS='http://pragprog.com/InterestCalc'

class Server2<SOAP::RPC::StandaloneServer

  def on_init

    calc=InterestCalculator.new

    add_method(calc,'compound','printcipal','rate','freq','years')

    add_method(calc,'call_count')

svr=Server2.new('Calc',NS,'0.0.0.0',12321)

trap('INT'){svr.shutdown}

svr.start

客户端代码存为client.rb

require 'soap/rpc/driver'

proxy=SOAP::RPC::Driver.new("http://localhost:12321","http://pragprog.com/InterestCalc")

proxy.add_method('compound','principle','rate','freq','years')

proxy.add_method('call_count')

puts "Call count: #{proxy.call_count}"

puts "5 years,compound annually: #{proxy.compound(100,0.06,1,5)}"

puts "5 years,compound monthly: #{proxy.compound(100,0.06,12,5)}"

我们在服务器端输入

% ruby server.rb

以打开服务器

客户端中输入

%ruby client.rb

会显示

Call count:0

5 years,compound annually:133.8225776

.......