如今我將列舉三種狀況,在這三種狀況下,你將會發現使用Web service會帶來極大的好處。此後,我還會舉出不該該使用Web service的一些狀況。
跨越防火牆的通訊
若是你的應用程序有成千上萬的用戶,並且他們都分佈在世界各地,那麼客戶端和服務器之間的通訊將是一個棘手的問題。那是由於客戶端和服務器之間一般都會 有防火牆或者代理服務器。在這種狀況下,你想使用DCOM就不是那麼簡單了,並且,一般你也不肯意把你的客戶端程序發佈到如此龐大數量的每個用戶手中。 因而,你最終選擇了用瀏覽器做爲客戶端,寫下一堆ASP頁面,把應用程序的中間層暴露給最終用戶。結果呢?運氣好的話,只是開發難度大了一些,運氣很差的 話,就會獲得一個根本沒法維護的應用程序。
想象一下你應該怎麼在你的應用程序裏面加入一個新的頁面:你必須先創建好用戶界面(Web 頁面),以及在這個頁面後面,包含相應商業邏輯的中間層組件。這還不夠,你還要再創建至少一個ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結 果格式化爲HTML形式,最後還要把"結果頁"送回瀏覽器。要是客戶端代碼再也不如此依賴於HTML表單,客戶端的編程不就簡單多了嗎?還有,創建ASP頁 面的那一步能夠省略掉嗎?
固然。若是你的中間層組件是Web service的話,你徹底能夠從用戶界面直接調用中間層組件,從而省掉創建ASP頁面的那一步。要調用Web service,你能夠直接使用Microsoft SOAP Toolkit或。NET這樣的SOAP客戶端,也可使用你本身開發的SOAP客戶端,而後把它和你的應用程序鏈接起來。這樣作,不只能夠縮短開發周 期,還能夠減小代碼的複雜度,並加強整個應用程序的可維護性。同時,你的應用程序也再也不須要在每次調用中間層組件時,都跳轉到相應的"結果頁"了。
以個人經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用Web service這種結構,能夠輕鬆的節省花在用戶界面編程上的20%的開發時間。這樣作還有另外一個好處,就是你將獲得一個由Web service組成的中間層,這一層是徹底能夠在應用程序集成或其餘場合下被重用的。最後,經過Web service把你的應用程序的邏輯和數據暴露出來,還可讓其它平臺上的客戶重用你的應用程序。
應用程序集成
企業級的應用程序開發者都知道,企業裏常常都要把用不一樣語言寫成的在不一樣平臺上運行的各類程序集成起來,而這種集成將花費很大的開發的力量。你的應用程序 常常都須要從運行在古老的IBM主機上的程序中獲取數據; 或者再把數據發送到主機或UNIX應用程序中去。即便是在同一個平臺上,不一樣的軟件廠商生產的各類軟件也經常須要集成起來。經過Web service,應用程序能夠用標準的方法把功能和數據暴露出來,供其它的應用程序使用。
例如,你有一個訂單登陸程序,用於登陸從客 戶來的新訂單,包括客戶信息、發貨地址、數量、價格和付款方式等信息。同時,你還有一個訂單執行程序,用於實際貨物發送的管理。這兩個程序是來自不一樣軟件 廠商的。一份新訂單進來以後,訂單登陸程序須要通知訂單執行程序發送貨物。經過在訂單執行程序上面增長一層Web service,訂單執行程序能夠把"AddOrder"函數暴露出來。這樣,每當有新訂單到來時,訂單登陸程序就能夠調用這個函數來發送貨物了。進而通 過Web service集成應用程序
B2B的集成
用Web service集成應用程序,可使你公司內部的商務處理更加自動化。但當交易跨越了你的供應商和客戶,突破了公司的界線時又會怎麼樣呢?跨公司的商務交易集成一般叫作B2B集成。
Web service是B2B集成成功的關鍵。經過Web service,你的公司能夠把關鍵的商務應用暴露給指定的供應商和客戶。例如,把你的電子下單系統和電子發票系統暴露出來,你的客戶就能夠以電子的方式 向你發送購貨訂單,而你的供應商則能夠以電子的方式把原料採購的發票發送給你。固然,這並非一個新的概念:電子文檔交換(EDI)早就是這樣了。Web service和EDI之間的主要區別在於,Web service的實現要比EDI簡單得多,並且Web service是運行在Internet上的,在世界任何地方均可輕易實現,這樣其運行成本就相對較低。不過,Web service並不像EDI那樣,是文檔交換或B2B集成的一套完整的解決方案。Web service只是B2B集成的一個關鍵部分,還須要許多其它的部分才能完成這個集成。
用Web service來實現B2B集成的最大好處在於能夠輕易實現互操做性。只要把你的商務邏輯暴露出來,成爲Web service,你就可讓任何指定的合做夥伴輕鬆的調用你的商務邏輯,而無論他們的系統在什麼平臺上運行,使用的是什麼開發語言。這樣就大大減小了花在 B2B集成的上的時間和成本。這樣的低成本讓許多本來沒法承受EDI的投資成本的中小企業也能實現B2B集成。
軟件重用
軟件重用是一個很大的主題,它有不少的形式和程度。最基本的形式是源代碼模塊或者類一級的重用。另外一種形式是二進制形式的組件重用。當前,像表格控件或 用戶界面控件這樣的可重用軟件組件在市場上都佔有很大的份額。但這類軟件的重用都有一個很嚴重的限制:重用僅限於代碼,而數據不能被重用。緣由在於你能夠 很輕易的發佈組件甚至源代碼,但要發佈數據就沒那麼容易了,除非那些數據都是不會常常變化的靜態數據。
而Web service容許你在重用代碼的同時,重用代碼後面的數據。使用Web service,你再也不像之前那樣,要先從第三方購買、安裝軟件組件,再從你的應用程序中調用這些組件。你只須要直接調用遠端的Web service就能夠了。舉個例子,你想在你的應用程序中確認用戶輸入的郵件地址,那麼,你只需把這個地址直接發送給相應的Web service,這個Web service 就會幫你查閱街道地址、城市、省區和郵政編碼等信息,確認這個地址的確在相應的郵政編碼區域。Web service 的提供商能夠按時間或使用次數來對這項服務進行收費。這樣的服務要經過組件重用來實現是不現實的,由於那樣的話你必須下載並安裝好包含街道地址、城市、省 區和郵政編碼等信息的數據庫,並且這個數據庫仍是不能實時更新的。
另外一種軟件重用的狀況是把好幾個應用程序的功能集成起來。例如,你 想要創建一個局域網上的門戶站點應用,讓用戶既能夠查詢他們的聯邦快遞包裹,察看股市行情,又能夠管理他們的日程安排,還能夠在線購買電影票。如今Web 上有不少應用程序供應商,都在其應用中實現了上面的這些功能。一旦他們把這些功能都經過Web service 暴露出來,你就能夠很是輕易地把全部這些功能都集成到你的門戶站點中,爲用戶提供一個統一的、友好的界面。
用Web service來集成各類應用中的功能,爲用戶提供一個統一的界面許多應用程序都會利用Web service,把當前基於組件的應用程序結構擴展爲組件和Web service 的混合結構。你也能夠在應用程序中使用第三方的Web service 提供的功能。你還能夠把你本身的應用程序的功能經過Web service 提供給別人。全部這些狀況下,你均可以重用代碼和代碼後面的數據。總之,Web service 將是軟件重用的一種很是有力的形式。
何時不該該使用Web Service
一個對Web service的完整介紹還應該包括何時不應用Web service.通過前面的介紹,咱們知道了Web service 在經過Web進行互操做或遠程調用的時候是最有用的。不過,還有許多狀況,Web service根本不能給你帶來任何好處。
單機應用程序
目前,咱們還有不少桌面應用程序是供商用和我的使用的。其中一些只須要與運行在本機上的其餘程序通訊。在這種狀況下,咱們最好就不要再用Web service ,只要用本地的API就能夠了。COM很是適合於在這種狀況下工做,由於它既小又快。運行在一臺服務器上的服務器軟件也是這樣:最好直接用COM或其餘本 地的API來進行應用程序間的調用。固然Web service 也能用在這些狀況下,但那樣不只消耗太大,並且不會給你帶來任何好處。
局域網上的同構應用程序
在許多應用中,你全部的程序都是用VB或VC開發的,都在Windows平臺下使用COM,都運行在同一個局域網上。例如,你有兩個服務器應用程序須要 相互通訊,或者你有一個Win32或WinForm的客戶程序要鏈接到局域網上的另外一個服務器程序。在這些程序裏使用DCOM會比SOAP/HTTP有效 的多。相似的,若是你的一個。NET程序要鏈接到LAN上的另外一個。NET程序,那麼你應該使用。NET remoting.有趣的是,在。NET remoting中,你也能夠指定使用SOAP/HTTP來進行Web service 調用。不過最好仍是直接經過TCP進行RPC調用,那樣會有效得多。總之,只要你從應用程序結構的角度看來,有別的方法比Web service 更有效,更可行,那就不要再用Web service.
總結
Web service是建立可互操做的分佈式應用程序的新平臺。Web service 的主要目標是跨平臺的可互操做性。爲了達到這一目標,Web service 是徹底基於XML、XSD等獨立於平臺、獨立於軟件供應商的標準的。
Web service在應用程序跨平臺和跨網絡進行通訊的時候是很是有用的。Web service適用於應用程序集成、B2B集成、代碼和數據重用,以及經過Web進行客戶端和服務器的通訊的場合。
固然,Web service也不是萬能的,你不能處處濫用Web service.在有些狀況下,Web service 會下降應用程序的性能,而不會帶來任何好處。例如,一臺機器或一個局域網裏面運行的同構應用程序就不該該用Web service 進行通訊。數據庫