什么時(shí)候(不)應(yīng)該使用Web Service 轉(zhuǎn)帖
發(fā)表時(shí)間:2024-06-19 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]shywalker 于 2001-12-10 13:49:07 加貼在 業(yè)界評(píng)說(shuō) ↑現(xiàn)在我將列舉三種情況,在這三種情況下,你將會(huì)發(fā)現(xiàn)使用Web service會(huì)帶來(lái)極大的好處。此后,我還會(huì)舉出不應(yīng)該使用Web service的一些情況?缭椒阑饓Φ耐ㄐ 如果你的應(yīng)用程序有成千上萬(wàn)的用戶,而且他們都...
shywalker 于 2001-12-10 13:49:07 加貼在 業(yè)界評(píng)說(shuō) ↑
現(xiàn)在我將列舉三種情況,在這三種情況下,你將會(huì)發(fā)現(xiàn)使用Web service會(huì)帶來(lái)極大的好處。此后,我還會(huì)舉出不應(yīng)該使用Web service的一些情況。
跨越防火墻的通信
如果你的應(yīng)用程序有成千上萬(wàn)的用戶,而且他們都分布在世界各地,那么客戶端和服務(wù)器之間的通信將是一個(gè)棘手的問(wèn)題。那是因?yàn)榭蛻舳撕头⻊?wù)器之間通常都會(huì)有防火墻或者代理服務(wù)器。在這種情況下,你想使用DCOM就不是那么簡(jiǎn)單了,而且,通常你也不愿意把你的客戶端程序發(fā)布到如此龐大數(shù)量的每一個(gè)用戶手中。于是,你最終選擇了用瀏覽器作為客戶端,寫下一堆ASP頁(yè)面,把應(yīng)用程序的中間層暴露給最終用戶。結(jié)果呢?運(yùn)氣好的話,只是開發(fā)難度大了一些,運(yùn)氣不好的話,就會(huì)得到一個(gè)根本無(wú)法維護(hù)的應(yīng)用程序。
想象一下你應(yīng)該怎么在你的應(yīng)用程序里面加入一個(gè)新的頁(yè)面:你必須先建立好用戶界面(Web頁(yè)面),以及在這個(gè)頁(yè)面后面,包含相應(yīng)商業(yè)邏輯的中間層組件。這還不夠,你還要再建立至少一個(gè)ASP頁(yè)面,用來(lái)接受用戶輸入的信息,調(diào)用中間層組件,把結(jié)果格式化為HTML形式,最后還要把"結(jié)果頁(yè)"送回瀏覽器。要是客戶端代碼不再如此依賴于HTML表單,客戶端的編程不就簡(jiǎn)單多了嗎?還有,建立ASP頁(yè)面的那一步可以省略掉嗎?
當(dāng)然。如果你的中間層組件是Web service的話,你完全可以從用戶界面直接調(diào)用中間層組件,從而省掉建立ASP頁(yè)面的那一步。要調(diào)用Web service,你可以直接使用Microsoft SOAP Toolkit或.NET這樣的SOAP客戶端,也可以使用你自己開發(fā)的SOAP客戶端,然后把它和你的應(yīng)用程序連接起來(lái)。這樣做,不僅可以縮短開發(fā)周期,還可以減少代碼的復(fù)雜度,并增強(qiáng)整個(gè)應(yīng)用程序的可維護(hù)性。同時(shí),你的應(yīng)用程序也不再需要在每次調(diào)用中間層組件時(shí),都跳轉(zhuǎn)到相應(yīng)的"結(jié)果頁(yè)"了。
以我的經(jīng)驗(yàn)來(lái)看,在一個(gè)用戶界面和中間層有較多交互的應(yīng)用程序中,使用Web service這種結(jié)構(gòu),可以輕松的節(jié)省花在用戶界面編程上的20%的開發(fā)時(shí)間。這樣做還有另一個(gè)好處,就是你將得到一個(gè)由Web service組成的中間層,這一層是完全可以在應(yīng)用程序集成或其他場(chǎng)合下被重用的。最后,通過(guò)Web service把你的應(yīng)用程序的邏輯和數(shù)據(jù)暴露出來(lái),還可以讓其它平臺(tái)上的客戶重用你的應(yīng)用程序。
應(yīng)用程序集成
企業(yè)級(jí)的應(yīng)用程序開發(fā)者都知道,企業(yè)里經(jīng)常都要把用不同語(yǔ)言寫成的在不同平臺(tái)上運(yùn)行的各種程序集成起來(lái),而這種集成將花費(fèi)很大的開發(fā)的力量。你的應(yīng)用程序經(jīng)常都需要從運(yùn)行在古老的IBM主機(jī)上的程序中獲取數(shù)據(jù);或者再把數(shù)據(jù)發(fā)送到主機(jī)或UNIX應(yīng)用程序中去。即使是在同一個(gè)平臺(tái)上,不同的軟件廠商生產(chǎn)的各種軟件也常常需要集成起來(lái)。通過(guò)Web service,應(yīng)用程序可以用標(biāo)準(zhǔn)的方法把功能和數(shù)據(jù)暴露出來(lái),供其它的應(yīng)用程序使用。
例如,你有一個(gè)訂單登錄程序,用于登錄從客戶來(lái)的新訂單,包括客戶信息、發(fā)貨地址、數(shù)量、價(jià)格和付款方式等信息。同時(shí),你還有一個(gè)訂單執(zhí)行程序,用于實(shí)際貨物發(fā)送的管理。這兩個(gè)程序是來(lái)自不同軟件廠商的。一份新訂單進(jìn)來(lái)之后,訂單登錄程序需要通知訂單執(zhí)行程序發(fā)送貨物。通過(guò)在訂單執(zhí)行程序上面增加一層Web service,訂單執(zhí)行程序可以把"AddOrder"函數(shù)暴露出來(lái)。這樣,每當(dāng)有新訂單到來(lái)時(shí),訂單登錄程序就可以調(diào)用這個(gè)函數(shù)來(lái)發(fā)送貨物了。進(jìn)而通過(guò)Web service集成應(yīng)用程序
B2B的集成
用Web service集成應(yīng)用程序,可以使你公司內(nèi)部的商務(wù)處理更加自動(dòng)化。但當(dāng)交易跨越了你的供應(yīng)商和客戶,突破了公司的界線時(shí)又會(huì)怎么樣呢?跨公司的商務(wù)交易集成通常叫做B2B集成。
Web service是B2B集成成功的關(guān)鍵。通過(guò)Web service,你的公司可以把關(guān)鍵的商務(wù)應(yīng)用暴露給指定的供應(yīng)商和客戶。例如,把你的電子下單系統(tǒng)和電子發(fā)票系統(tǒng)暴露出來(lái),你的客戶就可以以電子的方式向你發(fā)送購(gòu)貨訂單,而你的供應(yīng)商則可以以電子的方式把原料采購(gòu)的發(fā)票發(fā)送給你。當(dāng)然,這并不是一個(gè)新的概念:電子文檔交換(EDI)早就是這樣了。Web service和EDI之間的主要區(qū)別在于,Web service的實(shí)現(xiàn)要比EDI簡(jiǎn)單得多,而且Web service是運(yùn)行在Internet上的,在世界任何地方都可輕易實(shí)現(xiàn),這樣其運(yùn)行成本就相對(duì)較低。不過(guò),Web service并不像EDI那樣,是文檔交換或B2B集成的一套完整的解決方案。Web service只是B2B集成的一個(gè)關(guān)鍵部分,還需要許多其它的部分才能完成這個(gè)集成。
用Web service來(lái)實(shí)現(xiàn)B2B集成的最大好處在于可以輕易實(shí)現(xiàn)互操作性。只要把你的商務(wù)邏輯暴露出來(lái),成為Web service,你就可以讓任何指定的合作伙伴輕松的調(diào)用你的商務(wù)邏輯,而不管他們的系統(tǒng)在什么平臺(tái)上運(yùn)行,使用的是什么開發(fā)語(yǔ)言。這樣就大大減少了花在B2B集成的上的時(shí)間和成本。這樣的低成本讓許多原本無(wú)法承受EDI的投資成本的中小企業(yè)也能實(shí)現(xiàn)B2B集成。
軟件重用
軟件重用是一個(gè)很大的主題,它有很多的形式和程度。最基本的形式是源代碼模塊或者類一級(jí)的重用。另一種形式是二進(jìn)制形式的組件重用。當(dāng)前,像表格控件或用戶界面控件這樣的可重用軟件組件在市場(chǎng)上都占有很大的份額。但這類軟件的重用都有一個(gè)很嚴(yán)重的限制:重用僅限于代碼,而數(shù)據(jù)不能被重用。原因在于你可以很輕易的發(fā)布組件甚至源代碼,但要發(fā)布數(shù)據(jù)就沒(méi)那么容易了,除非那些數(shù)據(jù)都是不會(huì)經(jīng)常變化的靜態(tài)數(shù)據(jù)。
而Web service允許你在重用代碼的同時(shí),重用代碼后面的數(shù)據(jù)。使用Web service,你不再像以前那樣,要先從第三方購(gòu)買、安裝軟件組件,再?gòu)哪愕膽?yīng)用程序中調(diào)用這些組件。你只需要直接調(diào)用遠(yuǎn)端的Web service就可以了。舉個(gè)例子,你想在你的應(yīng)用程序中確認(rèn)用戶輸入的郵件地址,那么,你只需把這個(gè)地址直接發(fā)送給相應(yīng)的Web service,這個(gè)Web service 就會(huì)幫你查閱街道地址、城市、省區(qū)和郵政編碼等信息,確認(rèn)這個(gè)地址的確在相應(yīng)的郵政編碼區(qū)域。Web service 的提供商可以按時(shí)間或使用次數(shù)來(lái)對(duì)這項(xiàng)服務(wù)進(jìn)行收費(fèi)。這樣的服務(wù)要通過(guò)組件重用來(lái)實(shí)現(xiàn)是不現(xiàn)實(shí)的,因?yàn)槟菢拥脑捘惚仨毾螺d并安裝好包含街道地址、城市、省區(qū)和郵政編碼等信息的數(shù)據(jù)庫(kù),而且這個(gè)數(shù)據(jù)庫(kù)還是不能實(shí)時(shí)更新的。
另一種軟件重用的情況是把好幾個(gè)應(yīng)用程序的功能集成起來(lái)。例如,你想要建立一個(gè)局域網(wǎng)上的門戶站點(diǎn)應(yīng)用,讓用戶既可以查詢他們的聯(lián)邦快遞包裹,察看股市行情,又可以管理他們的日程安排,還可以在線購(gòu)買電影票,F(xiàn)在Web上有很多應(yīng)用程序供應(yīng)商,都在其應(yīng)用中實(shí)現(xiàn)了上面的這些功能。一旦他們把這些功能都通過(guò)Web service 暴露出來(lái),你就可以非常輕易地把所有這些功能都集成到你的門戶站點(diǎn)中,為用戶提供一個(gè)統(tǒng)一的、友好的界面。
用Web service來(lái)集成各種應(yīng)用中的功能,為用戶提供一個(gè)統(tǒng)一的界面
許多應(yīng)用程序都會(huì)利用Web service,把當(dāng)前基于組件的應(yīng)用程序結(jié)構(gòu)擴(kuò)展為組件和Web service 的混合結(jié)構(gòu)。你也可以在應(yīng)用程序中使用第三方的Web service 提供的功能。你還可以把你自己的應(yīng)用程序的功能通過(guò)Web service 提供給別人。所有這些情況下,你都可以重用代碼和代碼后面的數(shù)據(jù)。總之,Web service 將是軟件重用的一種非常有力的形式。
什么時(shí)候不應(yīng)該使用Web Service
一個(gè)對(duì)Web service的完整介紹還應(yīng)該包括什么時(shí)候不該用Web service。經(jīng)過(guò)前面的介紹,我們知道了Web service 在通過(guò)Web進(jìn)行互操作或遠(yuǎn)程調(diào)用的時(shí)候是最有用的。不過(guò),還有許多情況,Web service根本不能給你帶來(lái)任何好處。
單機(jī)應(yīng)用程序
目前,我們還有很多桌面應(yīng)用程序是供商用和個(gè)人使用的。其中一些只需要與運(yùn)行在本機(jī)上的其他程序通信。在這種情況下,我們最好就不要再用Web service ,只要用本地的API就可以了。COM非常適合于在這種情況下工作,因?yàn)樗刃∮挚。運(yùn)行在一臺(tái)服務(wù)器上的服務(wù)器軟件也是這樣:最好直接用COM或其他本地的API來(lái)進(jìn)行應(yīng)用程序間的調(diào)用。當(dāng)然Web service 也能用在這些情況下,但那樣不僅消耗太大,而且不會(huì)給你帶來(lái)任何好處。
局域網(wǎng)上的同構(gòu)應(yīng)用程序
在許多應(yīng)用中,你所有的程序都是用VB或VC開發(fā)的,都在Windows平臺(tái)下使用COM,都運(yùn)行在同一個(gè)局域網(wǎng)上。例如,你有兩個(gè)服務(wù)器應(yīng)用程序需要相互通信,或者你有一個(gè)Win32或WinForm的客戶程序要連接到局域網(wǎng)上的另一個(gè)服務(wù)器程序。在這些程序里使用DCOM會(huì)比SOAP/HTTP有效的多。類似的,如果你的一個(gè).NET程序要連接到LAN上的另一個(gè).NET程序,那么你應(yīng)該使用.NET remoting。有趣的是,在.NET remoting中,你也可以指定使用SOAP/HTTP來(lái)進(jìn)行Web service 調(diào)用。不過(guò)最好還是直接通過(guò)TCP進(jìn)行RPC調(diào)用,那樣會(huì)有效得多。總之,只要你從應(yīng)用程序結(jié)構(gòu)的角度看來(lái),有別的方法比Web service 更有效,更可行,那就不要再用Web service。
總結(jié)
Web service是創(chuàng)建可互操作的分布式應(yīng)用程序的新平臺(tái)。Web service 的主要目標(biāo)是跨平臺(tái)的可互操作性。為了達(dá)到這一目標(biāo),Web service 是完全基于XML、XSD等獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn)的。
Web service在應(yīng)用程序跨平臺(tái)和跨網(wǎng)絡(luò)進(jìn)行通信的時(shí)候是非常有用的。Web service適用于應(yīng)用程序集成、B2B集成、代碼和數(shù)據(jù)重用,以及通過(guò)Web進(jìn)行客戶端和服務(wù)器的通信的場(chǎng)合。
當(dāng)然,Web service也不是萬(wàn)能的,你不能到處濫用Web service。在有些情況下,Web service 會(huì)降低應(yīng)用程序的性能,而不會(huì)帶來(lái)任何好處。例如,一臺(tái)機(jī)器或一個(gè)局域網(wǎng)里面運(yùn)行的同構(gòu)應(yīng)用程序就不應(yīng)該用Web service 進(jìn)行通信。