我想大家一定會問?為什么你們項目中要用到
Web Services,因為客戶有如下需求:
- 1、客戶要求項目用C/S架構(gòu),并且服務器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。
- 2、最終用戶上報數(shù)據(jù),因為網(wǎng)絡原因,譬如Modem上網(wǎng),可以離線操作,等填寫了幾十張報表后,可以一次提交。同時,在登錄時,可以將服務端數(shù)據(jù)同步到本地Access或MSSQL數(shù)據(jù)庫,這樣提高客戶端響應速度。
- 3、由于有些報表以后可能需要修改,或添加一些新報表,又不想重新開發(fā),這樣客戶那邊工作人員可以通過客戶端自定義。
如果有以上需求,我想大家應該都比較認同這種異構(gòu)分布式解決方案:客戶端用C# .Net開發(fā),通過Web Services調(diào)用服務器端Java組件。
其實,上面的解決方案太過于理想,最后我們不得不面對殘酷的現(xiàn)實:三種客戶端中的兩種最后被迫改為B/S。
在項目中,我主要負責Web Services和服務器端組件開發(fā)中所遇到的種種問題,相當于技術支持吧,以及部分模塊的開發(fā)。
以下是我們開發(fā)中遇到的實際問題,雖然最終都一一解決,但遇到了幾個無法突破的瓶頸:客戶端不穩(wěn)定,客戶端響應遲緩,后期測試和維護困難巨大。
一、異構(gòu)平臺的Web Services兼容性
開發(fā)過程中,我們用Axis做Web Services引擎,Tomcat做容器。因為我們只有IBM提供的RAD6.0的60天試用版。該工具超級占內(nèi)存,用內(nèi)置的WebSphere開發(fā)測試極其緩慢,嚴重影響開發(fā)效率,經(jīng)過我初期試用后,基本廢棄了。推薦項目組二三十開發(fā)人員用Lomboz Eclipse3.12開發(fā),基本滿意。
由于Axis是一個嵌入式引擎,所以可以將其打包到最終的WebSphere AppServer(WAS)上,也就是說,我們沒有用到WAS提供的Web Services引擎,這引出了后面會談到的一個問題:Web Services安全性怎么部署?
用Axis時,Axis一直都有一個bug或是說缺陷,官方文檔也詳細注明,只是我們當時沒有發(fā)現(xiàn)而走了很多彎路:用Axis發(fā)布的Web Services給.net客戶端調(diào)用時,必須用RPC風格,不能用Web Services標準的跨平臺風格Document,而后者是Lomboz axis插件的默認方式。也就是說,我們發(fā)布的Web Services總是莫名其妙的不好用。我們用JBuilder2007自帶的Axis插件發(fā)布,竟然非常順利。
二、Web Services開發(fā)中服務器端組件問題
我們服務器端開發(fā),是用Spring+Hibernate,在Spring的Service層上再封裝一層,也就是faade模式了,該faade直接發(fā)布為Web Services,必須經(jīng)過這個轉(zhuǎn)換,一是因為性能,二是因為Hibernate的復雜Model對象,在wsdl描述后,被.net客戶端識別有些問題,List、Map也會有問題,總之這些對象太復雜了,我們包裝成簡單的VO對象。
另外一個問題是,我們的service方法,如果直接給WebWork這樣的框架在服務端用的的話,是不會出問題,當提供給.net客戶端用時,就會出現(xiàn)lazy loading的錯誤,因為.net客戶端不能接收Proxy對象,必須將數(shù)據(jù)全部load出來,但這時Hibernate的session已經(jīng)關閉。項目組很多人遇到這些問題,最后大家不約而同的全部用eager模式,導致了最后的惡果:嚴重的的性能問題。由于我不是leader,所以當時這個問題發(fā)現(xiàn)了,也沒法要求別人,畢竟很大的一個團隊。
切身體會:一個團隊,如果不熟悉Hibernate就隨便上,技術風險非常大。Hibernate帶來的開發(fā)效率,是以團隊成員掌握它為前提。
當然,性能問題不只是由Hibernate引起,Web Services本身的性能也非常嚴重:XML的序列化和反序列化耗時,XML文件的膨脹導致的網(wǎng)絡傳輸,HTTP的無狀態(tài)導致網(wǎng)絡IO性能。切身體會:如果系統(tǒng)必須用分布式,而不是追求所謂的SOA架構(gòu),Web Services應該是下下策,因為還有很多協(xié)議和方式可以選擇:IIOP、RMI、Hessian、burlap、RPC,另外,做系統(tǒng)集成還有Message方式。
Web Services開發(fā)中其它問題比較少,因為Web Services本身不用編程,只是部署的事情,開發(fā)工具和服務器會自動為我們做,我們只需要理解SOAP引擎的原理和使用就夠了,真的遇到問題,可以通過Axis的TcpMonitor監(jiān)視SOAP數(shù)據(jù)包。
開發(fā)過程中,.net客戶端那邊,VSStudio做得很智能,它會根據(jù)wsdl文件生成我們所要的一切,當然,wsdl文件的變化,會導致VSStudio重新生成所有的類和接口,也很耗時,并且容易出問題。
posted on 2007-07-03 10:29
綠茶 閱讀(99)
評論(0) 編輯 收藏