【正文】
put( message )。break。default:throw new Exception(invalid stage)。}}實(shí)現(xiàn)的核心部分是 ??蛻舳顺绦騪ublic mysoapextension_client extends SoapExtension//從 SoapExtension 派生一個(gè)類。{ public override void ProcessMessage(SoapMessage message){switch (){case ://解壓soap消息體messageWriteInput( message )。break。default:throw new Exception(invalid stage)。}}通過(guò)修改配置文件使得SOAP 擴(kuò)展與 XMLWeb 方法一起運(yùn)行。部分配置文件如下::?xml version= encoding=utf8 ?configuration webServices soapExtensionTypes add type=ServerSoapExtension. mysoapextension_serve, ServerSoapExtension priority=1 group=0/ /soapExtensionTypes /webServices ... / /configuration客戶端的配置文件和服務(wù)器的基本一致,配置完成后就可以實(shí)現(xiàn)soap的壓縮傳輸了。該項(xiàng)目中使用免費(fèi)軟件NZIPLIB庫(kù)來(lái)實(shí)現(xiàn)壓縮和解壓的操作的, zipper類的源代碼在附錄中。3. 壓縮數(shù)據(jù)傳輸效果測(cè)試:為了測(cè)試壓縮以后soap的傳輸優(yōu)化效果,我們作了數(shù)據(jù)傳輸測(cè)試。在沒(méi)有壓縮和壓縮過(guò)的的環(huán)境下從客戶端分別以相同的參數(shù)調(diào)用統(tǒng)一個(gè)服務(wù)返回一個(gè)大數(shù)據(jù)集并且填充客戶端應(yīng)用程序中的DataGrid,同時(shí)在程序中記錄了從發(fā)起請(qǐng)求到應(yīng)答之間的時(shí)間。下面是測(cè)試結(jié)果:分析軟件amp。硬件 客戶方: Intel Pentium 4 1800 MHz, 1024 MB RAM, Windows XP. 服務(wù)器方: Intel Pentium 4 1800 MHz, 1024 MB RAM, Windows 2000 Server, Microsoft SQL Server 2000.不使用SOAP壓縮調(diào)用的程序執(zhí)行時(shí)間和CPU的占用情況使用SOAP壓縮調(diào)用的程序執(zhí)行時(shí)間和CPU的占用情況、 、圖 、 顯示的那樣,沒(méi)有使用壓縮的CPU使用時(shí)間是 29903 % ,使用壓縮的CPU使用記錄的例子中,程序執(zhí)行時(shí)間是15182 milliseconds,CPU使用率是43%。我們可以得出結(jié)論客戶方獲取這個(gè)數(shù)據(jù)集的時(shí)候,使用壓縮與不使用壓縮少用了近50%的CPU時(shí)間,僅僅在CPU加載時(shí)有一點(diǎn)影響。當(dāng)客戶端和服務(wù)端交換大的數(shù)據(jù)時(shí),SOAP壓縮能顯著地增加X(jué)ML Web Services效率。 SOAP擴(kuò)展是通過(guò)壓縮交換數(shù)據(jù)來(lái)改善XML Web Services性能的,這僅僅對(duì)CPU加載時(shí)間造成了一點(diǎn)點(diǎn)影響。第五章 總結(jié)本系統(tǒng)是一個(gè)基于WEB SERVICE技術(shù)的數(shù)據(jù)集成平臺(tái),它利用了web service的跨平臺(tái)特性,整合了新華書(shū)店集團(tuán)原有的信息系統(tǒng),將原來(lái)的綜合業(yè)務(wù)系統(tǒng)、儲(chǔ)運(yùn)物流系統(tǒng)、財(cái)務(wù)管理系統(tǒng)、門店銷售系統(tǒng)五大系統(tǒng)整合成一個(gè)有機(jī)體,完成了這些系統(tǒng)之間的數(shù)據(jù)和業(yè)務(wù)流程交互,提高了企業(yè)的信息管理水平,為新華書(shū)店集團(tuán)的連鎖戰(zhàn)略提供了強(qiáng)有力的信息保障。系統(tǒng)采用java 作為開(kāi)發(fā)工具,weblogic作為應(yīng)用服務(wù)器。應(yīng)用了SOA架構(gòu)開(kāi)發(fā)了連鎖管理系統(tǒng)。該系統(tǒng)具備良好的擴(kuò)展性和兼容性由于采用了B/S的架構(gòu)它具備有良好的易部署性。他可以在相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)適應(yīng)新華書(shū)店集團(tuán)的業(yè)務(wù)發(fā)展。本文主要完成了一下幾個(gè)方面的工作。216。 分析了新華書(shū)店集團(tuán)信息系統(tǒng)的現(xiàn)狀,確定了連鎖管理系統(tǒng)所必需具備的功能模塊,詳細(xì)設(shè)計(jì)了連鎖系統(tǒng)的各個(gè)功能模塊。包括業(yè)務(wù)組件、數(shù)據(jù)庫(kù)訪問(wèn)持久層。216。 應(yīng)用SOA架構(gòu)設(shè)計(jì)了跨平臺(tái)的數(shù)據(jù)集成接口,詳細(xì)給出了該項(xiàng)技術(shù)的發(fā)展現(xiàn)狀,并給出了詳細(xì)的設(shè)計(jì)和具體實(shí)現(xiàn),216。 針對(duì)門店系統(tǒng)得多樣性,應(yīng)用動(dòng)態(tài)連接庫(kù)技術(shù)開(kāi)發(fā)了統(tǒng)一的共享的數(shù)據(jù)傳輸模塊,加強(qiáng)了程序開(kāi)發(fā)的可管理性。216。 針對(duì)門店數(shù)據(jù)傳輸數(shù)據(jù)量大的特點(diǎn),本文設(shè)計(jì)了利用soap壓縮來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)膬?yōu)化,提高了數(shù)據(jù)傳輸速度。 系統(tǒng)需要改進(jìn)之處和未來(lái)展望1. 系統(tǒng)得不足之處:216。 系統(tǒng)在安全上面做得不夠,沒(méi)有采用安全認(rèn)證和數(shù)字簽名,不能防止惡意的篡改數(shù)據(jù)和數(shù)據(jù)的泄密。216。 在保證WEB的可用性方面沒(méi)有采取強(qiáng)有力的措施,由于WEB服務(wù)采用請(qǐng)求應(yīng)答模式,而WEB服務(wù)很有可能部署在INTERNET網(wǎng)絡(luò)上面,網(wǎng)絡(luò)的不穩(wěn)定性很有可能在請(qǐng)求和應(yīng)答的中間聯(lián)系的中斷,系統(tǒng)缺乏一個(gè)確認(rèn)機(jī)制。因此對(duì)要保證系統(tǒng)的不間斷運(yùn)行必須要考慮采取措施保證系統(tǒng)的可用性。2. 未來(lái)展望:參考文獻(xiàn)[1]Philly Dot Net User Group. Integrating J2EE and .Net with Web Services. July2002[2] Microsoft Corporation. DCOM Technical Overview. 1996[3] John Montgomery. For CORBA and DCOM its time to get practical. April 1997[4] Dave Bartlett. Under the hood: IORs, GIOP and IIOP. August 2000[5] Heather Kreger. Web Services Conceptual Architecture. IBM Software Group 2002[6] W3C Working Draft. Web Service Architecture. August 2003[7] W3C Working Draft. Web Services Glossary. August 2003[8]Tim Landgrave. Maximize your investment by using legacy applications in .Net.July 10, 2003[9] Object Management Group. Common Object Request Broker: Architecture andSpecification (Revision ). 1998[10]Ton Bellwood. Understanding UDDI Tracking the evolving specification. July 2002[11]Dan Gisolfi. Web services architect, Part 3: Is Web services the reincarnationof CORBA?. July 2001[12]Ariba Inc., IBM Corporation and Microsoft Corporation. UDDI Technical WhitePaper. Sep 2000[13]Ariba Inc., IBM Corporation and Microsoft Corporation. UDDI Executive WhitePaper. Sep 2000[14]Ariba Inc., IBM Corporation and Microsoft Corporation. UDDI Programmer’s APISpecification. Mar 2001[15]Ariba Inc., IBM Corporation and Microsoft Corporation. UDDI Data Structure Reference. Sep 2000[16] Object Management Group. OMG CORBA/IIOP Specification. [17] Markus Horstmann and Mary Kirtland. DCOM Architecture. July 23, 1997[18]IBM Corporation. Web Service Description Language (WSDI). Sep 2000[19]IBM, Microsoft, DevelopMentor. SOAP: Simple Object Access ProtocolSpecification. 2000[20] service技術(shù)下的企業(yè)應(yīng)用集成[A].計(jì)算機(jī)與現(xiàn)代化,2003(4)[21] [A].計(jì)算機(jī)與網(wǎng)絡(luò),2006(18)[22] [A].沈陽(yáng)工學(xué)院學(xué)報(bào),2005(23)[A].電子技術(shù)應(yīng)用,2006(3)[23] SERVICE技術(shù)的分布式異構(gòu)數(shù)據(jù)庫(kù)的集成[A].東南大學(xué),2004碩士論文[24] [A].計(jì)算機(jī)應(yīng)用研究,2005(2)[25] [A].計(jì)算機(jī)工程與應(yīng)用,2003(20)[26] [A].電腦開(kāi)發(fā)與應(yīng)用,2005(12)[27] SERVICE的CSCW工作模型的研究[A].電腦開(kāi)發(fā)與應(yīng)用,2005(8)[28] 數(shù)據(jù)庫(kù)交互式動(dòng)態(tài)訪問(wèn)技術(shù)分析與比較[A].電腦開(kāi)發(fā)與應(yīng)用,2005(7)[29] [A].計(jì)算機(jī)工程,2000(10)[30] [A].微型電腦應(yīng)用,2003(2)[31] SERVICE認(rèn)證體系的分析與實(shí)現(xiàn)[A].(4)[32][A].武漢大學(xué)學(xué)報(bào),2006(05)[33] [A].計(jì)算機(jī)應(yīng)用,2000(10)[34] [A].微機(jī)發(fā)展,2004(8)[35] 梁麗 新華書(shū)店連鎖經(jīng)營(yíng)戰(zhàn)略實(shí)施的探索, 中國(guó)論文下載中心 URL: 附錄本項(xiàng)目使用免費(fèi)軟件NZIPLIB庫(kù)來(lái)實(shí)現(xiàn)壓縮和解壓,實(shí)現(xiàn)壓縮的zipper類的源代碼,using System。using 。using 。using 。using 。using 。using 。using 。 namespace zipper{ public class Class1 { public static string Compress(string unpressedString) { byte[] bytData = (unpressedString)。 MemoryStream ms = new MemoryStream()。 Stream s = new DeflaterOutputStream(ms)。 (bytData, 0, )。 ()。 byte[] pressedData = (byte[])()。 return (pressedData, 0, _)。 } public static string DeCompress(string pressedString) { string unpressedString=。 int totalLength = 0。 byte[] bytInput = (pressedString)。 byte[] writeData = new byte[4096]。 Stream s2 = new InflaterInputStream(new MemoryStream(bytInput))。 while (true) { int size = (writeData, 0, )。 if (size 0) { totalLength += size。 unpressedString+=(writeData, _0, size)。 } else { break。 } } ()。 return unpressedString。 } }}43 /