多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2

ruby教程

Ruby Web Services 應(yīng)用 – SOAP4R

閱讀 (2133)

Ruby Web Services 應(yīng)用 - SOAP4R


什么是 SOAP?

簡單對(duì)象訪問協(xié)議(SOAP,全寫為Simple Object Access Protocol)是交換數(shù)據(jù)的一種協(xié)議規(guī)范。

SOAP 是一種簡單的基于 XML 的協(xié)議,它使應(yīng)用程序通過 HTTP 來交換信息。

簡單對(duì)象訪問協(xié)議是交換數(shù)據(jù)的一種協(xié)議規(guī)范,是一種輕量的、簡單的、基于XML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)子集)的協(xié)議,它被設(shè)計(jì)成在WEB上交換結(jié)構(gòu)化的和固化的信息。

更多 SOAP 教程請(qǐng)查看:http://www.vxbq.cn/s/soap/soap-intro.html


SOAP4R 安裝

SOAP4R 由Hiroshi Nakamura開發(fā)實(shí)現(xiàn),用于 Ruby 的 SOAP 應(yīng)用。

SOAP4R 下載地址:http://raa.ruby-lang.org/soap4r/

注意:你的ruby環(huán)境可能已經(jīng)安裝了該該組件。

Linux 環(huán)境下你也可以使用 gem 來安裝該組件,命令如下:

$ gem install soap4r --include-dependencies

如果你是window環(huán)境下開發(fā),你需要下載zip壓縮文件,并通過執(zhí)行 install.rb 來安裝。


SOAP4R 服務(wù)

SOAP4R 支持兩種不同的服務(wù)類型:

  • 基于 CGI/FastCGI 服務(wù) (SOAP::RPC::CGIStub)
  • 獨(dú)立服務(wù) (SOAP::RPC:StandaloneServer)

本教程將為大家介紹如何建立獨(dú)立的 SOAP 服務(wù)。步驟如下:

第1步 - 繼承SOAP::RPC::StandaloneServer

為了實(shí)現(xiàn)自己的獨(dú)立的服務(wù)器,你需要編寫一個(gè)新的類,該類為 SOAP::RPC::StandaloneServer 的子類:

class MyServer < SOAP::RPC::StandaloneServer   ............... end 

注意:如果你要編寫一個(gè)基于FastCGI的服務(wù)器,那么你需要繼承 SOAP::RPC::CGIStub 類,程序的其余部分將保持不變。

第二步 - 定義處理方法

接下來我們定義Web Services的方法,如下我們定義兩個(gè)方法,一個(gè)是兩個(gè)數(shù)相加,一個(gè)是兩個(gè)數(shù)相除:

class MyServer < SOAP::RPC::StandaloneServer
   ...............

   # 處理方法
   def add(a, b)
      return a + b
   end
   def div(a, b) 
      return a / b 
   end
end

第三步 - 公布處理方法

接下來添加我們?cè)诜?wù)器上定義的方法,initialize方法是公開的,用于外部的連接:

class MyServer < SOAP::RPC::StandaloneServer
   def initialize(*args)
      add_method(receiver, methodName, *paramArg)
   end
end

以下是各參數(shù)的說明:

參數(shù)描述
receiver包含方法名的方法的對(duì)象。 如果你在同一個(gè)類中定義服務(wù)方法,該參數(shù)為 self
methodName調(diào)用 RPC 請(qǐng)求的方法名。
paramArg參數(shù)名和參數(shù)模式

為了理解 inoutout 參數(shù),考慮以下服務(wù)方法,需要輸入兩個(gè)參數(shù):inParam 和 inoutParam,函數(shù)執(zhí)行完成后返回三個(gè)值:retVal、inoutParam 、outParam:

def aMeth(inParam, inoutParam)
   retVal = inParam + inoutParam
   outParam = inParam . inoutParam
   inoutParam = inParam * inoutParam
   return retVal, inoutParam, outParam
end

公開的調(diào)用方法如下:

add_method(self, 'aMeth', [
    %w(in inParam),
    %w(inout inoutParam),
    %w(out outParam),
    %w(retval return)
])

第四步 - 開啟服務(wù)

最后我們通過實(shí)例化派生類,并調(diào)用 start 方法來啟動(dòng)服務(wù):

myServer = MyServer.new('ServerName',
                        'urn:ruby:ServiceName', hostname, port)

myServer.start

以下是請(qǐng)求參數(shù)的說明:

參數(shù)描述
ServerName服務(wù)名,你可以取你喜歡的
urn:ruby:ServiceNameHere urn:ruby 是固定的,但是你可以為你的服務(wù)取一個(gè)唯一的 ServiceName
hostname指定主機(jī)名
portweb 服務(wù)端口

實(shí)例

接下來我們通過以上的步驟,創(chuàng)建一個(gè)獨(dú)立的服務(wù):

require "soap/rpc/standaloneserver"

begin
   class MyServer < SOAP::RPC::StandaloneServer

      # Expose our services
      def initialize(*args)
         add_method(self, 'add', 'a', 'b')
         add_method(self, 'div', 'a', 'b')
      end

      # Handler methods
      def add(a, b)
         return a + b
      end
      def div(a, b) 
         return a / b 
      end
  end
  server = MyServer.new("MyServer", 
            'urn:ruby:calculation', 'localhost', 8080)
  trap('INT){
     server.shutdown
  }
  server.start
rescue => err
  puts err.message
end

執(zhí)行以上程序后,就啟動(dòng)了一個(gè)監(jiān)聽 8080 端口的本地服務(wù),并公開兩個(gè)方法:add 和 div。

你可以再后臺(tái)執(zhí)行以上服務(wù):

$ ruby MyServer.rb&

SOAP4R 客戶端

ruby 中使用 SOAP::RPC::Driver 類開發(fā) SOAP 客戶端。接下來我們來詳細(xì)看下 SOAP::RPC::Driver 類的使用。

調(diào)用 SOAP 服務(wù)需要以下信息:

  • SOAP 服務(wù) URL 地址 (SOAP Endpoint URL)
  • 服務(wù)方法的命名空間(Method Namespace URI)
  • 服務(wù)方法名及參數(shù)信息

接下來我們就一步步來創(chuàng)建 SOAP 客戶端來調(diào)用以上的 SOAP 方法:add 、 div:

第一步 - 創(chuàng)建 SOAP Driver 實(shí)例

我們可以通過實(shí)例化 SOAP::RPC::Driver 類來調(diào)用它的新方法,如下所示:

SOAP::RPC::Driver.new(endPoint, nameSpace, soapAction)

以下是參數(shù)的描述:

參數(shù)描述
endPoint連接 SOAP 服務(wù)的 URL 地址
nameSpace命名空間用于 SOAP::RPC::Driver 對(duì)象的所有 RPC .
soapAction用于 HTTP 頭部的 SOAPAction 字段值。如果是字符串是"" 則默認(rèn)為 nil

第二步 - 添加服務(wù)方法

為 SOAP::RPC::Driver 添加 SOAP 服務(wù)方法,我們可以通過實(shí)例 SOAP::RPC::Driver 來調(diào)用以下方法:

driver.add_method(name, *paramArg)

以下是參數(shù)的說明:

參數(shù)描述
name遠(yuǎn)程web服務(wù)的方法名
paramArg指定遠(yuǎn)程程序的參數(shù)

第三步 - 調(diào)用SOAP服務(wù)

最后我們可以使用 SOAP::RPC::Driver 實(shí)例來調(diào)用 SOAP 服務(wù):

result = driver.serviceMethod(paramArg...)

serviceMethod SOAP服務(wù)的實(shí)際方法名,paramArg為方法的參數(shù)列表。

實(shí)例

基于以上的步驟,我們可以編寫以下的 SOAP 客戶端:

#!/usr/bin/ruby -w

require 'soap/rpc/driver'

NAMESPACE = 'urn:ruby:calculation'
URL = 'http://localhost:8080/'

begin
   driver = SOAP::RPC::Driver.new(URL, NAMESPACE)
   
   # Add remote sevice methods
   driver.add_method('add', 'a', 'b')

   # Call remote service methods
   puts driver.add(20, 30)
rescue => err
   puts err.message
end

以上我們只是簡單介紹 Ruby 的 Web Services 。 如果你想了解更多可以查看官方文檔:Ruby 的 Web Services

關(guān)閉
程序員人生
主站蜘蛛池模板: 中文字幕一区二区在线观看 | 欧美亚洲综合在线 | 久久国产精品老人性 | 涩涩五月天婷婷丁香综合社区 | 性猛交xxxxx按摩 | 欧美一区二区丝袜高跟鞋 | 激情区小说区偷拍区图片区 | 亚洲欧美国产一区二区三区 | 成人精品网| 最新99国产成人精品视频免费 | 欧美激情在线视频播放 | 成人免费视频视频在线不卡 | 欧美日韩中文亚洲v在线综合 | 成人中文字幕在线观看 | 免费又黄又爽又猛大片午夜 | 爽爽视频在线观看 | 亚洲一级视频在线观看 | 18一20岁一级毛片 | 精彩视频一区二区三区 | 精品久久久久久久一区二区伦理 | 亚洲欧洲日产国码在线观看 | 免费在线观看视频a | 激情网站视频 | 亚洲精品蜜桃久久久久久 | www.日本在线观看 | 亚洲综合网在线观看 | 免费观看欧美成人1314色 | 91精品日韩 | 欧美人与性动交α欧美精品 | 欧美日韩高清不卡一区二区三区 | 美日韩精品 | 色吊丝欧美 | 在线观看一区二区三区视频 | 噜噜嘿在线视频免费观看 | 亚洲一区二区成人 | 日韩精品福利在线 | 毛片最新网址 | 日本一区三区 | 欧美日韩一区二区三 | 欧美特黄a级高清免费看片 欧美特黄一级aa毛片 | 天天亚洲综合 |