1. 程式人生 > >webserver技術總結之一:webserver概念

webserver技術總結之一:webserver概念

一:為什麼需要WebService

大家或多或少都可能聽說WebService,也可能用到過。比如我們在開發專案的過程中,需要呼叫別的公司提供的資料,這裡我們就需要使用到webserver。當前的應用程式開發逐步的呈現了兩種迥然不同的傾向:1:基於瀏覽器的瘦客戶端應用程式,2:基於瀏覽器的富客戶端應用程式(RIA)。當然後一種技術相對來說更加的時髦一些(如現在很流行的Html5技術),這裡主要講前者。

基於瀏覽器的瘦客戶端應用程式並不是 因為瘦客戶能夠提供更好的使用者介面,而是因為它能夠避免花在桌面應用程式釋出上的高成本。釋出桌面應用程式成本很高,

一半是因為應用程式安裝和配置的問 題,另一半是因為客戶和伺服器之間通訊的問題。傳統的Windows富客戶應用程式使用DCOM來與伺服器進行通訊和呼叫遠端物件。

配置好DCOM使其在 一個大型的網路中正常工作將是一個極富挑戰性的工作,同時也是許多IT工程師的噩夢。事實上,許多IT工程師寧願忍受瀏覽器所帶來的功能限制,

也不願在局 域網上去執行一個DCOM。關於客戶端與伺服器的通訊問題,一個完美的解決方法是使用HTTP協議來通訊。這是因為任何執行Web瀏覽器的機器都在使用 HTTP協議。

同時,當前許多防火牆也配置為只允許HTTP連線。許多商用程式還面臨另一個問題,那就是與其他程式的互操作性。如果所有的應用程式都是使用COM或.NET語言寫的,

並且都執行在Windows平臺上,那就天下太平了。然而,事實上大多數商業資料仍然在大型主機上以非關係檔案(VSAM) 的形式存放,並由COBOL語言編寫的大型機程式訪問。

而且,目前還有很多商用程式繼續在使用C++、Java、Visual Basic和其他各種各樣 的語言編寫。現在,除了最簡單的程式之外,所有的應用程式都需要與執行在其他異構平臺上

的應用程式整合並進行資料交換。這樣的任務通常都是由特殊的方法, 如檔案傳輸和分析,訊息佇列,還有僅適用於某些情況的的API,

如IBM的高階程式到程式交流(APPC)等來完成的。

在以前,沒有一個應用程式通訊標 準,是獨立於平臺、組建模型和程式語言的。只有通過Web Service,客戶端和伺服器才能夠自由的用HTTP進行通訊,

不論兩個程式的平臺和程式語言是什麼。

二:WebService的含義

綜上所述,WebService是一種跨程式語言和跨作業系統的遠端呼叫技術。或者說是一種以HTTP協議為基礎,通過xml進行客戶端和伺服器端通訊的框架或者元件。

天氣預報系統、淘寶網、校內網等會把自己的服務以web service的形式暴露出來,外界可以通過Web進行呼叫。我們呼叫這個web service的應用程式就是客戶端,提供webservice服務的就是伺服器端。

值得注意的是,我們編寫的webservice必須符合它的標準。

三:WebService的實現原理

XML+XSD,SOAP和WSDL就是構成WebService平臺的三大技術。

1:XML+XSD

WebService採用HTTP協議傳輸資料,採用XML格式封裝資料(即XML中說明呼叫遠端服務物件的哪個方法,傳遞的引數是什麼,

以及服務物件的 返回結果是什麼)。
XML是WebService平臺中表示資料的格式。除了易於建立和易於分析外,XML主要的優點在於它既是平臺無關的,

又是廠商無關 的。無關性是比技術優越性更重要的:軟體廠商是不會選擇一個由競爭對手所發明的技術的。 

XML解決了資料表示的問題,但它沒有定義一套標準的資料型別,更沒有說怎麼去擴充套件這套資料型別。

例如,整形數到底代表什麼?16位,32位,64位?

這 些細節對實現互操作性很重要。XML Schema(XSD)就是專門解決這個問題的一套標準。它定義了一套標準的資料型別,

並給出了一種語言來擴充套件這套資料型別。WebService平臺就 是用XSD來作為其資料型別系統的。

當你用某種語言(如VB.NET或C#)來構造一個Web service時,為了符合WebService標準,所 有你使用的資料型別都

必須被轉換為XSD型別。你用的工具可能已經自動幫你完成了這個轉換,但你很可能會根據你的需要修改一下轉換過程。

2:SOAP

WebService通過HTTP傳送請求和接收結果。傳送的請求內容和結果內容都採用xml格式封裝,並增加了一些特定的HTTP訊息頭,

這些特定的HTTP訊息頭和xml內容格式就是SOAP協議。

SOAP協議=HTTP 協議+XML資料格式

SOAP協議定義了SOAP訊息的格式,SOAP協議是基於HTTP協議的,SOAP也是基於XML和XSD的,XML是SOAP的資料編碼方式。

打個比喻:HTTP就是普通公路,XML就是中間的綠色隔離帶和兩邊的防護欄,SOAP就是普通公路經過加隔離帶和防護欄改造過的高速公路。

3:wsdl

好比我們去商店買東西,首先要知道商店裡有什麼東西可買,然後再來購買,商家的做法就是張貼廣告海報。 WebService也一樣,

WebService客戶端要呼叫一個WebService服務,首先要有知道這個服務的地址在哪,以及這個服務裡有什麼方 法可以呼叫,

所以,WebService務器端首先要通過一個WSDL檔案來說明自己家裡有啥服務可以對外呼叫,

服務是什麼(服務中有哪些方法,方法接受 的引數是什麼,返回值是什麼),服務的網路地址用哪個url地址表示,服務通過什麼方式來呼叫。

WSDL(Web Services Description Language)就是這樣一個基於XML的語言,用於描述Web Service及其函式、引數和返回值。

它是WebService客戶端和伺服器端都能理解的標準格式。因為是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,

這將是一個很大的好處。一些最新的開發工具既能根據你的 Web service生成WSDL文件,又能匯入WSDL文件,生成呼叫相應WebService的

代理類程式碼。

WSDL 檔案儲存在Web伺服器上,通過一個url地址就可以訪問到它。客戶端要呼叫一個WebService服務之前,

要知道該服務的WSDL檔案的地址。

WebService服務提供商可以通過兩種方式來暴露它的WSDL檔案地址:

1.註冊到UDDI伺服器,以便被人查詢;

2.直接告訴給客戶端呼叫者。

四:WebService開發

Webservice開發分為:服務端開發和客戶端開發。

1:服務端開發

把公司內部系統的業務方法釋出成WebService服務,供遠端合作單位和個人呼叫。

(藉助一些WebService框架可以很輕鬆地把自己的業務物件釋出成WebService服務,

Java方面的典型WebService框架包括:axis,xfire,cxf 等,java ee伺服器通常也支援釋出WebService服務,例如JBoss。)

2:客戶端開發

呼叫別人釋出的WebService服務,大多數人從事的開發都屬於這個方面,例如,呼叫天氣預報WebService服務。

(使用廠 商的WSDL2Java之類的工具生成靜態呼叫的代理類程式碼;

使用廠商提供的客戶端程式設計API類;使用SUN公司早期標準的jax-rpc開發包;使用 SUN公司最新標準的jax-ws開發包。當然SUN已被ORACLE收購)

3:WebService原理

1:編寫好WebService服務端後,需要向UUID伺服器註冊供別人使用。

2:客戶端去UUID伺服器上查詢自己需要的WebService。

3:客戶端向WebService提供者詢問確切的呼叫方法

4:WebService伺服器向客戶端傳送一個Wsdl檔案。該WSDL檔案描述了它所能提供的所有方法介面。

5:客戶端了解之後,將WSDL中描述的介面方法封裝成HTTP請求,傳送給WebService伺服器。

6:WebService伺服器端響應客戶端傳送的HTTP請求,將處理結果以同樣的SOAP報文形式通過HTTP協議傳送給客戶端。

參考資料:

http://www.cnblogs.com/xdp-gacl/p/4048937.html

http://blog.csdn.net/ostrichmyself/article/details/6393627