天天看點

【雜談】WebService是什麼?

webservice是什麼? 

webservice的一個最基本的目的就是提供在各個不同平台的不同應用系統的協同工作能力。 

其實webservice并不是什麼神秘的東西,它就是一個可以遠端調用的類,或者說是元件。 

為什麼要使用webservice? 

webservice是一個新的概念,它并不是微軟首先提出的,但是微軟的dotnet戰略讓它最廣泛的發揮它的潛能。也許它流行的根本原因并不是微軟,也許是因為帶寬與存儲量的飛速發展,但是dotnet戰略确實起到了很大的作用,令它能夠在更加廣泛的開發平台上施展。dotnet戰略上司着微軟前進,微軟為了dotnet計劃也花費了近300億美元。為什麼?因為微軟要它的理念、方式不但在單機軟體,甚至在internet上也被最廣泛的認同。webservice最早被應用在sun等對網絡先知先覺的平台上,并且在苦苦的期待發展。而j2ee是最早的成功開發webservice的平台,它的理念就是在網上最廣泛的傳播、使用,成為一種真正的服務。當微軟的dotnet計劃即将實施的時候,微軟也開始發掘webservice的潛力。今天的

web 站點僅能為浏覽器提供使用者界面,而下一代可程式設計 web 站點直接将企業、應用程式、服務和裝置彼此連結。這些可程式設計 web 站點将不隻是被動通路的站點,而将成為可重用的智能 web 服務。是以我們要使用webservice才能适應将來的發展趨勢。一句話:為了順應時代的發展。 

webservice有什麼優勢及劣勢? 

在早期的webservice開發中,由于帶寬與存儲容量的限制,令它并不被人關注。随着技術的發展,帶寬與存儲已經不成任何問題了,随便一條光纖就有1000m,家庭用的計算機都有160gb,更不要說伺服器用的動辄就上tb的磁盤陣列了。然而,随着internet的飛速發展,人們都應該感覺到網絡給人們帶來的新驚喜了,那就是網上辦公。現在的網上辦公系統是越做越先進,但是有一個通病——相容性問題,是以溝通十分的困難,然而webservice則讓人的溝通更加順暢。打個比方:兩國的人交流需要翻譯,十分麻煩,是以不如統一兩國的語言。而webservice就是這樣的一個新的概念。webservice的發展時間很短,是以導緻了一個問題——安全性。由于xml傳輸全部是明文傳輸,是以導緻了安全性問題也不奇怪,但隻需在要傳輸的資料上做點手腳就解決了。 

分布式應用程式和浏覽器 

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

傳統的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的代碼。

原文出處:http://sakyone.iteye.com/blog/353063