一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - 利用Ruby的SOAP4R編寫SOAP服務器的教程

利用Ruby的SOAP4R編寫SOAP服務器的教程

2020-04-29 10:36腳本之家 Ruby

這篇文章主要介紹了利用Ruby的SOAP4R編寫SOAP服務器的教程,并且詳細介紹了添加驅動和調用服務的方法,需要的朋友可以參考下

 什么是SOAP ?

簡單對象訪問協議(SOAP)是一個跨平臺和語言無關的,基于XML的RPC協議,通常(但不一定)是HTTP。

它使用XML來編碼信息使遠程過程調用,HTTP在網絡上從客戶機到服務器來傳輸信息,反之亦然。

SOAP有幾個優勢超過其他技術,如COM,CORBA等為例,其相對廉價的部署和調試成本,它的可擴展性和易于使用,存在幾種不同的語言和平臺實現。

請參閱出簡單的教程了解 SOAP

本教程將熟悉SOAP實現Ruby(SOAP4R)。這是一個基本的教程,所以如果需要深入細節,那么需要參考其他資源。
安裝SOAP4R:

SOAP4R是由Hiroshi Nakamura編定,可以直接從網上下載Ruby的開發的SOAP實現:

注意:有可能已經安裝了這個組件。

Download SOAP

如果知道 gem 實用工具,那么可以使用下面的命令安裝SOAP4R和相關包。

$ gem install soap4r --include-dependencies

如果是在Windows上工作,那么需要下載一個壓縮文件,從上面的位置,需要安裝它使用標準的安裝方法運行Ruby的 install.rb.
編寫SOAP4R服務器:

SOAP4R支持兩種不同類型的服務器:

  1.     CGI/FastCGI based (SOAP::RPC::CGIStub)

  2.     Standalone (SOAP::RPC:StandaloneServer)

本教程將詳細編寫一個獨立的服務器。涉及編寫SOAP服務器有以下步驟:
第1步 - 繼承SOAP::RPC::StandaloneServer 類:

要實現自己的獨立服務器,需要編寫一個新類,這將SOAP::StandaloneServer 類的子類,如下:

 

復制代碼 代碼如下:
class MyServer < SOAP::RPC::StandaloneServer
  ...............
end

 

注意:如果想編寫一個基于FastCGI的服務器,那么需要繼承SOAP::RPC::CGIStub 類, 其余步驟將保持相同。
第2步 - 定義處理程序方法:

第二步是編寫Web服務方法,希望向外界公開。

它們可以寫成簡單的Ruby方法。例如,讓我們寫了兩個兩個兩個數相加,兩個數相除的方法:

?
1
2
3
4
5
6
7
8
9
10
11
class MyServer < SOAP::RPC::StandaloneServer
  ...............
 
  # Handler methods
  def add(a, b)
   return a + b
  end
  def div(a, b)
   return a / b
  end
end

第3步 - 暴露處理程序方法:

下一步是我們定義的方法添加到我們的服務器。 initialize方法用于暴露服務的方法,用以下兩種方法之一:

?
1
2
3
4
5
class MyServer < SOAP::RPC::StandaloneServer
  def initialize(*args)
   add_method(receiver, methodName, *paramArg)
  end
end

下面的參數說明:

利用Ruby的SOAP4R編寫SOAP服務器的教程

 To understand the usage of inout or out parameters, consider the following service method that takes two parameters (inParam and inoutParam), returns one normal return value (retVal) and two further parameters: inoutParam and outParam:

?
1
2
3
4
5
6
def aMeth(inParam, inoutParam)
  retVal = inParam + inoutParam
  outParam = inParam . inoutParam
  inoutParam = inParam * inoutParam
  return retVal, inoutParam, outParam
end

現在,我們可以公開這個方法如下:

?
1
2
3
4
5
6
add_method(self, 'aMeth', [
  %w(in inParam),
  %w(inout inoutParam),
  %w(out outParam),
  %w(retval return)
])

第4步 - 啟動服務器:

最后一步是通過實例的派生類的一個實例,并調用start方法來啟動服務器。

?
1
2
3
4
myServer = MyServer.new('ServerName',
            'urn:ruby:ServiceName', hostname, port)
 
myServer.start

這是必需的參數的描述:

利用Ruby的SOAP4R編寫SOAP服務器的教程

  例如:

現在使用上述步驟,讓我們寫一個獨立的服務器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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

執行時,服務器應用程序開始一個獨立的SOAP服務在localhost上偵聽8080端口的請求。它暴露了一個服務方法:add 和 div ,這需要兩個參數并返回結果。

現在可以運行這個服務器后臺如下:

?
1
$ ruby MyServer.rb&

編寫SOAP4R客戶端:

SOAP::RPC::Driver 類用于寫入SOAP客戶端應用程序提供支持。本教程將介紹這個類,顯示其使用的應用程序的基礎。

以下是最低要求的信息,需要調用SOAP服務:

  •     SOAP服務(SOAP端點URL)

  •     service方法(方法命名空間URI)

  •     service方法的名稱及其參數

現在我們將編寫一個SOAP客戶端調用服務定義的方法在上面的例子名稱為add和div。

以下是主要的步驟來創建一個SOAP客戶端:
步驟1 - 創建一個SOAP驅動程序實例:

我們創建一個實例 SOAP::RPC::Driver 通過調用 new 方法如下:

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

這是必需的參數的描述:

利用Ruby的SOAP4R編寫SOAP服務器的教程

 第2步 - 添加服務的方法:

要添加到SOAP SOAP服務方法到 SOAP::RPC::Driver 我們可以調用下面的方法使用 SOAP::RPC::Driver 實例:

driver.add_method(name, *paramArg)

下面的參數說明:

利用Ruby的SOAP4R編寫SOAP服務器的教程

 第3步 - 調用SOAP服務:

最后一步是調用SOAP服務使用 SOAP::RPC::Driver 實例如下:

?
1
result = driver.serviceMethod(paramArg...)

這里serviceMethod是實際的Web服務方法和paramArg...是列表參數需要通過在服務方法。
例如:

根據上述步驟,我們將編寫一個SOAP客戶端如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/ruby -w
 
require 'soap/rpc/driver'
 
NAMESPACE = 'urn:ruby:calculation'
 
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

 

延伸 · 閱讀

精彩推薦
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
主站蜘蛛池模板: 欧美大奶艳星 | 女子监狱第二季在线观看免费完整版 | 欧洲老妇人70 | 放荡护士玩3p口述 | 国产大片视频免费观看 | 97自拍视频在线观看 | 亚洲情欲网| 教室里的激情电影 | 国产亚洲福利一区二区免费看 | 无码人妻视频又大又粗欧美 | 亚洲AV无码国产精品午夜久久 | 亚洲gogo人体大胆西西安徽 | 精品国产91久久久久久久 | 午夜宅男宅女看在线观看 | 精品福利视频一区二区三区 | 免费精品一区二区三区在线观看 | 亚洲精品久久久WWW游戏好玩 | 娇女的呻吟亲女禁忌h16 | 亚洲欧美专区精品伊人久久 | 日韩成人小视频 | 小夫妻天天恶战 | 娇妻中日久久持久久 | 免费高清在线 | 无人在线视频高清免费观看动漫 | 97就去干 | 色综合欧美色综合七久久 | 免费观看国产视频 | 黄绝一级 | 亚洲剧情在线观看 | 精品国产一级在线观看 | 国产日日操 | 奇米777四色精品综合影院 | 日韩免费视频播播 | 国产91对白在线观看 | 国产美女做爰免费视频网址 | 都市风流贵妇激情 | 精品国产欧美一区二区 | 欧美多gayxxxx | 国产日韩精品一区二区在线观看播放 | 欧美精品国产一区二区三区 | 精品国产91久久久久久久 |