什麼是Web Service?

Web service到底是什麼;在什麼情況下你應該使用Web service。

分佈式應用程序和瀏覽器

研究一下當前的應用程序開發,你會發現一個絕對的傾向:人們開始偏愛基於瀏覽器的瘦客戶應用程序。這當然不是因爲瘦客戶能夠提供更好的用戶界面,而是因爲它能夠避免花在桌面應用程序發佈上的高成本。發佈桌面應用程序成本很高,一半是因爲應用程序安裝和配置的問題,另一半是因爲客戶和服務器之間通信的問題。

傳統的Windows富客戶應用程序使用DCOM來與服務器進行通信和調用遠程對象。配置好DCOM使其在一個大型的網絡中正常工作將是一個極富挑戰性的工作,同時也是許多IT工程師的噩夢。事實上,許多IT工程師寧願忍受瀏覽器所帶來的功能限制,也不願在局域網上去運行一個DCOM。在我看來,結果就是一個發佈容易,但開發難度大而且用戶界面極其受限的應用程序。極端的說,就是你花了更多的資金和時間,卻開發出從用戶看來功能更弱的應用程序。不信?問問你的會計師對新的基於瀏覽器的會計軟件有什麼想法:絕大多數商用程序用戶希望使用更加友好的Windows用戶界面。

關於客戶端與服務器的通信問題,一個完美的解決方法是使用HTTP協議來通信。這是因爲任何運行Web瀏覽器的機器都在使用HTTP協議。同時,當前許多防火牆也配置爲只允許HTTP連接。

許多商用程序還面臨另一個問題,那就是與其他程序的互操作性。如果所有的應用程序都是使用COM或.NET語言寫的,並且都運行在Windows平臺上,那就天下太平了。然而,事實上大多數商業數據仍然在大型主機上以非關係文件(VSAM)的形式存放,並由COBOL語言編寫的大型機程序訪問。而且,目前還有很多商用程序繼續在使用C++、Java、Visual Basic和其他各種各樣的語言編寫。現在,除了最簡單的程序之外,所有的應用程序都需要與運行在其他異構平臺上的應用程序集成並進行數據交換。這樣的任務通常都是由特殊的方法,如文件傳輸和分析,消息隊列,還有僅適用於某些情況的的API,如IBM的"高級程序到程序交流(APPC)"等來完成的。在以前,沒有一個應用程序通信標準,是獨立於平臺、組建模型和編程語言的。只有通過Web Service,客戶端和服務器才能夠自由的用HTTP進行通信,不論兩個程序的平臺和編程語言是什麼。

什麼是Web Service

對這個問題,我們至少有兩種答案。從表面上看,Web service 就是一個應用程序,它向外界暴露出一個能夠通過Web進行調用的API。這就是說,你能夠用編程的方法通過Web來調用這個應用程序。我們把調用這個Web service 的應用程序叫做客戶。例如,你想創建一個Web service ,它的作用是返回當前的天氣情況。那麼你可已建立一個ASP頁面,它接受郵政編碼作爲查詢字符串,然後返回一個由逗號隔開的字符串,包含了當前的氣溫和天氣。要調用這個ASP頁面,客戶端需要發送下面的這個HTTP GET請求:

http://host.company.com/weather.asp?zipcode=20171

返回的數據就應該是這樣:

21,晴

這個ASP頁面就應該可以算作是Web service 了。因爲它基於HTTP GET請求,暴露出了一個可以通過Web調用的API。當然,Web service 還有更多的東西。

下面是對Web service 更精確的解釋: Web services是建立可互操作的分佈式應用程序的新平臺。作爲一個Windows程序員,你可能已經用COM或DCOM建立過基於組件的分佈式應用程序。COM是一個非常好的組件技術,但是我們也很容易舉出COM並不能滿足要求的情況。

Web service平臺是一套標準,它定義了應用程序如何在Web上實現互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。

新平臺

Web service平臺需要一套協議來實現分佈式應用程序的創建。任何平臺都有它的數據表示方法和類型系統。要實現互操作性,Web service平臺必須提供一套標準的類型系統,用於溝通不同平臺、編程語言和組件模型中的不同類型系統。在傳統的分佈式系統中,基於界面(interface)的平臺提供了一些方法來描述界面、方法和參數(譯註:如COM和COBAR中的IDL語言)。同樣的,Web service平臺也必須提供一種標準來描述Web service,讓客戶可以得到足夠的信息來調用這個Web service。最後,我們還必須有一種方法來對這個Web service進行遠程調用。這種方法實際是一種遠程過程調用協議(RPC)。爲了達到互操作性,這種RPC協議還必須與平臺和編程語言無關。下面幾個小節就簡要介紹了組成Web service平臺的這三個技術。

XML和XSD

可擴展的標記語言(XML)是Web service平臺中表示數據的基本格式。除了易於建立和易於分析外,XML主要的優點在於它既是平臺無關的,又是廠商無關的。無關性是比技術優越性更重要的:軟件廠商是不會選擇一個由競爭對手所發明的技術的。

XML解決了數據表示的問題,但它沒有定義一套標準的數據類型,更沒有說怎麼去擴展這套數據類型。例如,整形數到底代表什麼?16位,32位,還是64位?這些細節對實現互操作性都是很重要的。W3C制定的XML Schema(XSD)就是專門解決這個問題的一套標準。它定義了一套標準的數據類型,並給出了一種語言來擴展這套數據類型。Web service平臺就是用XSD來作爲其數據類型系統的。當你用某種語言(如VB.NET或C#)來構造一個Web service時,爲了符合Web service標準,所有你使用的數據類型都必須被轉換爲XSD類型。你用的工具可能已經自動幫你完成了這個轉換,但你很可能會根據你的需要修改一下轉換過程。在第二章中,我們將深入XSD,學習怎樣轉換自定義的數據類型(例如類)到XSD的類型。

SOAP

Web service建好以後,你或者其他人就會去調用它。簡單對象訪問協議(SOAP)提供了標準的RPC方法來調用Web service。實際上,SOAP在這裏有點用詞不當:它意味着下面的Web service是以對象的方式表示的,但事實並不一定如此:你完全可以把你的Web service寫成一系列的C函數,並仍然使用SOAP進行調用。SOAP規範定義了SOAP消息的格式,以及怎樣通過HTTP協議來使用SOAP。SOAP也是基於XML和XSD的,XML是SOAP的數據編碼方式。第三章我們會討論SOAP,並結識SOAP消息的各種元素。

WSDL

你會怎樣向別人介紹你的Web service有什麼功能,以及每個函數調用時的參數呢?你可能會自己寫一套文檔,你甚至可能會口頭上告訴需要使用你的Web service的人。這些非正式的方法至少都有一個嚴重的問題:當程序員坐到電腦前,想要使用你的Web service的時候,他們的工具(如Visual Studio)無法給他們提供任何幫助,因爲這些工具根本就不瞭解你的Web

service。解決方法是:用機器能閱讀的方式提供一個正式的描述文檔。Web service描述語言(WSDL)就是這樣一個基於XML的語言,用於描述Web service及其函數、參數和返回值。因爲是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的Web service生成WSDL文檔,又能導入WSDL文檔,生成調用相應Web service的代碼。

什麼是SOAP?

1.SOAP也被稱作XMLP,爲兩個程序交換信息提供了一種標準的工作機制。在各類機構之間通過電子方式相互協作的情況下完全有必要爲此制定相應的標準。

交換信息可以採用很多方法,比如電子郵件、即時聊天和遠程過程調用(RPC)等。電子郵件和聊天消息通常不具備計算機友好性。計算機可以讀取電子郵件報頭,但是其類型內容卻無法得到計算機這個"硅腦袋"的理解。即時聊天和RPC也面臨同樣的尷尬情況:計算機倒是可讀可人又沒法讀了。

計算機確實知道如何理解XML。SOAP描述了把消息捆綁爲XML的工作方式。它還說明了發送消息的發送方、消息的內容和地址以及發送消息的時間。這也是爲什麼把SOAP叫做一種協議的原因。SOAP並沒有同電子郵件協議(SMTP)、RPC(套接字和IDL)或者Web協議(HTTP)截然分開。SOAP要利用這些系統作爲消息的起點。

2.SOAP是Web Service的基本通信協議。因爲SOAP與DCOM和CORBA在概念上有相同之處,所以很多人在問:"SOAP是怎樣激活對象的?"或"SOAP在使用什麼命名服務(Naming Service)?"。或許在執行SOAP的過程當中會用到這些,但這些並不在SOAP規範要考慮的範疇之內。SOAP只是定義SOAP消息的XML格式(XML Format),如果你用一對SOAP標記(SOAP Elements)把XML文檔括起來,那麼這個就是一個SOAP消息,這不是很簡單嗎?

3.SOAP規範還定義了怎樣用XML來描述程序數據(Program Data),怎樣執行RPC(Remote Procedure Call)。這些可選的規範是爲了構建RPC-style的應用程序(客戶端SOAP消息包含函數名和在函數中用到的參數,而服務器端SOAP消息包含執行函數之後的結果)。大多數SOAP解決方案都支持RPC-style應用程序,因爲很多程序員已對DCOM或CORBA熟悉。SOAP還支持Document-style應用程序(SOAP消息只包含XML文本信息)。Document-style應用程序有很好的靈活性,所以很多用RPC很難構建的Web Service用這種方式構建。

1.最後SOAP規範還定義了HTTP消息是怎樣傳輸SOAP消息的。這並不代表SOAP只能用HTTP來作爲傳輸協議,MSMQ、SMTP、TCP/IP都可以做SOAP的傳輸協議。

很多大公司根據SOAP規範,都開發出了自己的SOAP解決方案。這些解決方案都是相對於某種語言。比如說Microsoft SOAP toolkit2.0把COM函數轉換成SOAP消息,而Apache toolkit把JAVA函數轉換成SOAP消息。這樣難免帶來一些兼容性問題。

現在SOAP的很多另人矚目的特性已成爲現實(SOAP已經運行於不同的硬件和軟件平臺),而且有70多個解決方案。之所以SOAP被人們所愛戴,是因爲SOAP比其他同類技術(CORBA、DCE)簡單易用。

安全性對於應用程序來說是很重要的。那麼SOAP的安全性如何呢?對於把HTTP作爲傳輸協議的SOAP來說是沒有問題的,因爲HTTP協議已經有很好的安全構架。那麼用其他傳輸協議會出現安全問題嗎?不是的,你不必擔心,因爲已經有這方面的規範了(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws-security.asp)。

2.簡易物件存取協定  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章