天天看點

Onvif協定學習:3、了解web services

Onvif協定學習:3、了解web services

文章目錄

  • ​​Onvif協定學習:3、了解web services​​
  • ​​1、遠端調用​​
  • ​​2、遠端調用原理​​
  • ​​3、Web Services的簡單了解​​
  • ​​4、Web Services舉例​​
  • ​​(1)、天氣預報WEB服務​​
  • ​​(2)、手機号歸屬地查詢WEB服務​​
  • ​​5、Web Services常用的幾種架構​​
  • ​​6、SOAP簡介​​
  • ​​(1)、 在TCP/IP四層模型中展示SOAP​​
  • ​​(2)、如此了解SOAP​​
  • ​​(3)、SOAP的局限性​​
  • ​​(4)、SOAP協定看起來長這樣​​
  • ​​(5)、WSDL文檔​​
  • ​​7、總結​​

ONVIF規範中裝置管理和控制部分所定義的接口均以Web Services的形式提供。要了解什麼是ONVIF,就必須先知道什麼是Web Services。是以,在專欄開始介紹ONVIF之前,我單獨整理了一篇文章來介紹Web Services。

本文僅是簡要的介紹了「什麼是Web Services」,旨在讓你對Web Services有個感性的認識。

是以本文隻适合那些「沒學過Web Services」的朋友,如果你已經懂得什麼是Web Services,那麼可以移步了。

Web Services初學者,往往會被諸如WSDL、SOAP、HTTP、XML等概念搞得暈頭轉向。往往也會發出這樣的疑問:要勝任ONVIF協定網絡錄影機(IPC)用戶端程式開發,對Web Services的掌握要到什麼程度?我現在就消除你的疑惑,你隻要知道皮毛就夠了,這得益于諸如gSOAP這樣現成的工具,避免了我們「自己造輪子」。跟着我的專欄一步步學習,你就會體會到這點。

不多說,進入本文的主題。

1、遠端調用

函數接口調用方式分為:

本地調用(Local Procedure Call,簡稱LPC)。

遠端調用(Remote Procedure Call,簡稱RPC)。

Onvif協定學習:3、了解web services
  • 本地調用:通常,在我們的代碼中調用一個函數,這個函數要麼是系統API,要麼是我們自己實作的本地代碼,一起編譯,一起釋出,也在同一個程序中一起執行,這就是本地調用!
  • 遠端調用:被調用方法的具體實作不在同一個程序,而是在别程序,甚至别的電腦上。RPC一個重要思想就是,使遠端調用看起來像本地調用一樣,調用者無需知道被調用接口具體在哪台機器上執行。

2、遠端調用原理

比如 A (client) 調用 B (server) 提供的remoteAdd方法:

  • 1、首先A與B之間建立連接配接(通常是TCP,但還有其他的,如HTTP、管道等);
  • 2、然後A把需要調用的方法名(這裡是remoteAdd)以及方法參數(10, 20)序列化成位元組流發送出去;
  • 3、B接受A發送過來的位元組流,然後反序列化得到方法名,方法參數,接着執行相應的方法調用并把結果30傳回;
  • 4、A接受遠端調用結果,輸出30。
Onvif協定學習:3、了解web services

通過上面的簡單闡述,遠端調用與socket通訊好像啊,都是遠端通訊,都是C/S模式。他兩者到底有啥差別?

  • 1、RPC在提供強大的遠端調用能力的同時,不損失本地調用的語義簡潔性。RPC一個重要思想就是:使遠端調用看起來像本地調用一樣。
  • 2、socket是RPC經常采用的通信手段之一,除了Socket,RPC還有其他的通信方法,比如:http、作業系統自帶的管道等。

用HTTP協定實作的遠端調用,熟悉的人一下子就想到了Web Service。

3、Web Services的簡單了解

我們可以這樣來了解什麼是Web Services,它即是一種網絡服務。當你的系統完成一個通用的功能以後,如果你想讓别人使用你的功能的話,那麼你就可以釋出成為Web Services服務,别人就可以通過網絡遠端調用到你的服務接口(即通過輸入url可以通路,我們還可以像函數一樣傳遞參數通過url傳遞)。

Onvif協定學習:3、了解web services

Web Services能夠讓各個系統之間的對接變得:快捷、友善、廉價。

4、Web Services舉例

免費的Web Services服務:http://www.webxml.com.cn/zh_cn/index.aspx

這個網址提供了很多免費的Web Services服務,而且在網頁上提供了各個遠端調用接口的「測試」功能,這個「測試」功能有助于大家了解Web Services服務的遠端調用接口,大家可以去體驗下,我拿其中的「天氣預報」和「手機号歸屬地查詢」舉個例子。

(1)、天氣預報WEB服務

Web Services服務位址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

看主要接口getWeather,輸入城市名稱調用該接口,Web Services就會傳回該城市的天氣預報資料,如下圖所示。

Onvif協定學習:3、了解web services

(2)、手機号歸屬地查詢WEB服務

Web Services服務位址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx

看接口getMobileCodeInfo,輸入手機号碼,就能獲得手機号碼歸屬地省份、地區和手機卡類型資訊。如下圖所示:

Onvif協定學習:3、了解web services

5、Web Services常用的幾種架構

實作Web Services的幾種方式:

Onvif協定學習:3、了解web services

實作Web Services常用的架構有:REST、SOAP、JavaScript、XML-PRC等。這些看不懂,沒關系,大家知道一個事情即可:實作Web Services的方式有好幾種。

我們的主角ONVIF标準中的Web Service采用的是SOAP方式,接下來我們來了解下SOAP。

6、SOAP簡介

(1)、 在TCP/IP四層模型中展示SOAP

SOAP(Simple Object Access Protoco,簡單對象通路協定),是TCP/IP協定體系中的一個應用層協定,它是在HTTP基礎之上實作的。

Onvif協定學習:3、了解web services

(2)、如此了解SOAP

淺談 SOAP:http://www.ibm.com/developerworks/cn/xml/x-sisoap/

這篇IBM的文章「淺談 SOAP」寫的很好,值得參考。

以下這張圖是我對SOAP的了解:

Onvif協定學習:3、了解web services

SOAP協定 = RPC機制 + HTTP傳輸協定 + XML資料格式

SOAP的兩個主要設計目标是「簡單性」和「可擴充性」,SOAP的設計正是圍繞這兩點展開的。

SOAP使用RPC機制,展現了「簡單性」。讓用戶端調用Web Service的接口看起來像本地調用一樣,确實很簡單。

SOAP 使用 HTTP 傳送 XML,展現了「可擴充性」。盡管HTTP 不是有效率的通訊協定,而且 XML 還需要額外的檔案解析(parse),兩者使得交易的速度大大低于其它方案。但是XML 是一個開放、健全、有語義的訊息機制,而 HTTP 成熟、穩定、又能避免許多關于防火牆的問題,進而使SOAP得到了廣泛的應用。

套用一副對聯加以概括:

上聯: 社群活躍架構多

下聯: 簡單易懂不出錯

橫批: 省時省力

(3)、SOAP的局限性

SOAP也有一些局限性,以下場景就不适合 SOAP:

Onvif協定學習:3、了解web services
  • 實時資料推送

    HTTP是短連接配接的,都是用戶端請求,服務端應答,這種模式導緻服務端無法實時推送資料給用戶端,隻有像Socket那樣的長連接配接才能保證明時通訊。

  • 省流量、高傳輸效率的應用

    HTTP有標頭,而且XML全部用文本檔案來傳輸資料,效率會比較低,如果你對流量、傳輸效率要求極高,那麼你應該多考慮其它的方式,而不要用 SOAP。

(4)、SOAP協定看起來長這樣

這個一個股票Web Services服務系統,其中GetStockPrice接口适用于查詢股票目前價格,圖中查詢了IBM的股票價格,Web Services傳回股票價格為34.5

Onvif協定學習:3、了解web services

(5)、WSDL文檔

對于一個Web Services,我們如何知道它對外提供了多少個接口,以及每個接口是如何調用的,這就涉及到WSDL(Web Services Description Language,網絡服務描述語言)。

注意:隻有SOAP方式實作的Web Services才有WSDL文檔,其他方式實作的Web Services并沒有WSDL文檔。

我們可以這麼了解WSDL:WSDL是一個使用XML語言書寫的文檔,這個文檔描述了Web Services對外提供了哪些接口,就像動态庫的.h檔案一樣。每個Web Services都有對應的WSDL文檔。

Onvif協定學習:3、了解web services

什麼是WSDL

如果将WSDL語言轉化成C語言,它看起來應該是這樣子:

Onvif協定學習:3、了解web services

我們可以看看完整的WSDL文檔長什麼樣子的:

  • ​​天氣預報WEB服務的接口說明(WSDL文檔)​​
  • ​​手機号歸屬地查詢WEB服務的接口說明(WSDL文檔)​​
  • ​​ONVIF标準的WEB服務的接口說明(WSDL文檔)​​

如果你是第一次接觸WSDL文檔,前兩個的WSDL文檔估計你是看不懂(排版亂糟糟),而ONVIF的WSDL文檔興許你還能看懂(ONVIF官網的WSDL之是以這麼工整,是因為插入排版的語句)。

7、總結

回顧下本文的重點:

Web Services是一種網絡服務,它對外提供了一系列遠端調用接口(RPC),你可以像本地調用一樣去調用這些遠端調用接口。列舉了幾個免費的WEB服務供大家體驗。

Web Services常用的架構有多種,ONVIF标準中的Web Service采用的是SOAP方式。