版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
精品文檔-下載后可編輯一種消息處理器的的設計與實現(xiàn)-設計應用XML和簡單對象訪問協(xié)議(SimpleObjectAccessProtocol,SOAP)帶來了信息交換技術革命性的進步,極大地促進了分布式應用的發(fā)展。XML(ExtensibleMarkupLanguage)即可擴展標記語言,它與HTML一樣,都是SGML(STandardGeneralizedMarkupLanguage,標準通用標記語言)。Xml是Internet環(huán)境中跨平臺的,依賴于內(nèi)容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言XML是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標記描述數(shù)據(jù),而這些標記可以用方便的方式建立,雖然XML占用的空間比二進制數(shù)據(jù)要占用更多的空間,但XML極其簡單易于掌握和使用。目前,在基于SOAP信息交換應用的集成化開發(fā)環(huán)境和工具中關于SOAP的技術對開發(fā)人員基本上是透明的,即屏蔽和隱藏了SOAP實現(xiàn)和處理的細節(jié)。深入了解SOAP消息的處理過程和SOAP處理器的工作機理,可以對分布式應用進行更加靈活地控制。
1SOAP概述
簡單對象訪問協(xié)議(SOAP)是一種輕量的、簡單的、基于XML的協(xié)議,它被設計成在WEB上交換結構化的和固化的信息。SOAP可以和現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結合使用,包括超文本傳輸協(xié)議(HTTP),簡單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴充協(xié)議(MIME)。它還支持從消息系統(tǒng)到遠程過程調(diào)用(RPC)等大量的應用程序。SOAP消息基本上是從發(fā)送端到接收端的單向傳輸,但它們常常結合起來執(zhí)行類似于請求/應答的模式。所有的SOAP消息都使用XML編碼。一條SOAP消息就是一個包含有一個必需的SOAP的封裝包,一個可選的SOAP標頭和一個必需的SOAP體塊的XML文檔。
2SOAP消息處理模型
2.1SOAP的應用架構和消息處理模型框架
SOAP成功地解決了異構網(wǎng)絡環(huán)境中的軟件組件和應用程序之間進行可靠信息交換的難題。以WebService為例,其SOAPRPC的應用架構如圖1所示。一般開發(fā)環(huán)境都隱藏了SOAP消息處理的過程,這部分功能封裝于由開發(fā)環(huán)境自動生成的客戶端和服務器端的SOAP代理模塊中,其中都使用了編譯好的高層類庫,用戶據(jù)此難以探究其內(nèi)部的處理細節(jié)。
實際上,客戶端和服務器端的SOAP代理模塊內(nèi)部做了大量的處理工作。SOAPRPC的處理過程如圖2所示??蛻舳四K按照WebService使用接口要求的格式和規(guī)范,通過XML處理器將客戶端的RPC調(diào)用編碼成SOAP請求消息。SOAP請求消息中按規(guī)定封裝了請求服務所必需的信息,借助傳輸協(xié)議傳送到服務器端;服務器的傳輸協(xié)議監(jiān)聽器得到傳輸?shù)膬?nèi)容,由服務器端的代理模塊按照WSDL文檔描述的WebService接口的信息采用XML處理器對SOAP請求消息進行解析,提取出適當?shù)男畔ⅲ商峁┫鄳腤eb服務的對象,調(diào)用請求的方法,得到服務程序的處理結果,再按WSDL文檔的要求將服務處理結果生成SOAP響應消息,借助傳輸協(xié)議傳回客戶端;客戶端的代理按照WSDL文檔描述的信息解析SOAP響應消息,提取出適當?shù)男畔⒎祷乜蛻舫绦颉T诳蛻舳撕头掌鞫藢OAP消息進行串行化和反串行化期間,涉及到客戶程序的數(shù)據(jù)類型與XML的類型系統(tǒng)XSD之間,以及XML的類型系統(tǒng)XSD與服務程序的數(shù)據(jù)類型之間的相互映射,還有對象參數(shù)的序列化和反序列化工作。
當SOAP與HTTP綁定時,服務器端的消息監(jiān)聽可以采用ASP或ISAPI處理方式。
SOAP消息的生成和解析工作與WSDL文檔密切相關,只有遵照WebService對應的WSDL文檔中描述的信息格式,SOAP消息才能得到正確的、自動化的處理。
2.2WSDL簡介
WSDL是WebService的描述語言,用于描述WebService的服務,接口綁定等,它以一種XML模式來描述WebService的接口。服務的使用方根據(jù)這些描述信息來理解如何使用服務。由于描述方法和格式具有統(tǒng)一的標準和規(guī)范,因此便于由機器來自動處理描述信息。實際上,很多開發(fā)環(huán)境就是由軟件工具根據(jù)服務模塊自動生成相應的WSDL文檔。
在具體實現(xiàn)SOAP處理器的過程中需要編程訪問WSDL文檔。為使篇幅簡潔,本文將采用MSSOAPTK3.0中提供的WSDL文檔模型對象接口(詳情可參見MSTK3.0開發(fā)文檔)來編程分析WSDL文檔,即通過編程對象及其方法遍歷文檔中的元素,得到的接口描述信息用以處理SOAP消息。
3實現(xiàn)SOAP處理器的功能
由圖2所示的SOAP消息處理器的功能和過程架構,可以實現(xiàn)自行開發(fā)的SOAP處理器。
3.1具體的實現(xiàn)模型
由于SOAP消息和WSDL文檔都是基于XML格式的,所以代理的工作主要是分析和處理XML文檔??梢愿鶕?jù)SOAP消息封裝格式、編碼規(guī)則、RPC表示以及WSDL文檔結構的協(xié)議規(guī)范,采用任一種XML解析器工具來處理SOAP和WSDL這類特殊的XML文檔(如圖2所示)。本文將采用MSTK3.0中的低層API來實現(xiàn)SOAP代理,處理過程反映了技術機理和細節(jié)。將準備實現(xiàn)的客戶端和服務器端的SOAP代理類命名為mySoapClient和mySoapServer。其內(nèi)部實現(xiàn)過程模型分別如圖3和圖4所示。
3.2具體實現(xiàn)
下面采用VB6.0來實現(xiàn)mySoapClient類和mySoapServer類。
3.2.1客戶端SOAP代理
新建ActiveXDLL工程MyClientSoap,添加并引用MicrosoftSoapTypeLibraryv3.0。將以下代碼加入mySoapClient類模塊中。
DimPortAsIWSDLPort
PublicSubInitialize(ByValWSDLFileNameAsString,
OptionalByValServiceNameAsString=″″,
OptionalByValPortNameAsString=″″,
OptionalByValWSMLFileNameAsString=″″)
DimFetchedAsLong
DimWSDLReaderAsNewWSDLReader30
′loadWSDLfile
WSDLReader.LoadWSDLFileName,WSMLFileName
′gettheservice
DimServiceEnumeratorAsIEnumWSDLService,ServiceAsIWSDLService
WSDLReader.GetSoapServicesServiceEnumerator
IfServiceName=″″Then
ServiceEnumerator.Next1,Service,Fetched
Else
ServiceEnumerator.FindServiceName,Service
EndIf
′gettheport
DimPortEnumeratorAsIEnumWSDLPorts
Service.GetSoapPortsPortEnumerator
IfPortName=″″Then
PortEnumerator.Next1,Port,Fetched
Else
PortEnumerator.FindPortName,Port
EndIf
EndSub
PublicFunctionInvoke(ByValOperationNameAsString,
ParamArrayParameter()AsVariant)AsVariant
′findtheoperation
DimOperationEnumeratorAsIEnumWSDLOperations,
OperationAsIWSDLOperation
Port.GetSoapOperationsOperationEnumerator
OperationEnumerator.FindOperationName,Operation
′preparerequest
DimMapperEnumeratorAsIEnumSoapMappers,
MapperAsISoapMapper
Operation.GetOperationPartsMapperEnumerator
DimFetchedAsLong
MapperEnumerator.Next1,Mapper,Fetched
DoWhileFetched=1
If(Mapper.IsInput=smInput)Or(Mapper.IsInput=smInOut)Then
Mapper.ComValue=Parameter(Mapper.ParameterOrder)
EndIf
MapperEnumerator.Next1,Mapper,Fetched
Loop
′constructtherequestmessageandsendit.
′(thatis,invokingtheoperationandgettingresult)
DimSerializerAsSoapSerializer30
DimConnectorAsSoapConnector30
SetConnector=NewHttpConnector30
Connector.ConnectWSDLPort
Connector.BeginMessageWSDLOperation
SetSerializer=NewSoapSerializer30
Serializer.InitConnector.InputStream
Serializer.StartEnvelope
Serializer.StartBody
Operation.SaveSerializer,True′writestheXML
Serializer.EndBody
Serializer.EndEnvelope
′loadresponse
DimSoapReaderAsNewSoapReader30
SoapReader.LoadConnector.OutputStream
Operation.LoadSoapReader,False
′returntheoutgoingparametersandresult
MapperEnumerator.Reset
MapperEnumerator.Next1,Mapper,Fetched
DoWhileFetched=1
IfMapper.IsInput=smOutputThen
IfMapper.VariantType=vbObjectThen
SetInvoke=Mapper.ComValue
Else
Invoke=Mapper.ComValue
EndIf
ElseIfMapper.IsInput=smInOutThen
Parameter(Mapper.ParameterOrder)=Mapper.ComValue
EndIf
MapperEnumerator.Next1,Mapper,Fetched
Loop
EndFunction
將mySoapClient類實例化就成為客戶端SOAP代理對象。mySoapClient類向外提供了二個可調(diào)用的接口:(1)Initialize方法利用WSDL文檔中描述的WebService接口消息來初始化客戶端代理對象,用戶還可指定要遠程調(diào)用的WebService的服務名稱ServiceName和端口名稱PortName。(2)Invoke方法向客戶程序提供了使用WebService的接口,用戶只需提供WebService中的方法名稱和此方法的參數(shù),就可以調(diào)用WebService。
3.2.2服務器端SOAP代理
新建ActiveXDLL工程MyServerSoap,并添加引用MicrosoftSoapTypeLibraryv3.0。
將以下代碼加入mySoapServer類模塊中。
DimWSDLReaderAsWSDLReader30
PublicSubInitialize(ByValWSDLFileNameAsString,ByValWSMLFileNameAsString)
SetWSDLReader=NewWSDLReader30
WSDLReader.SetProperty″LoadOnServer″,True
WSDLReader.LoadWSDLFileName,WSMLFileName
EndSub
PublicSubProcessRequest(ByValRequestAsIStream,ByValResponseAsIStream)
DimWSDLPortAsIWSDLPort
DimWSDLOperationAsIWSDLOperation
DimSerializerAsNewSoapSerializer30
DimSoapReaderAsNewSoapReader30
SoapReader.LoadRequest
WSDLReader.ParseRequestSoapReader,WSDLPort,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河南林業(yè)職業(yè)學院單招綜合素質筆試參考題庫帶答案解析
- 腫瘤精準醫(yī)療策略
- 2026年河南測繪職業(yè)學院單招綜合素質考試備考試題帶答案解析
- 2026年廣元中核職業(yè)技術學院高職單招職業(yè)適應性測試參考題庫有答案解析
- 移動醫(yī)療應用開發(fā)與推廣
- 生物信息學在生物統(tǒng)計中的應用
- 醫(yī)學影像技術進步分析
- 2026年大連航運職業(yè)技術學院高職單招職業(yè)適應性測試參考題庫有答案解析
- 財碼課件教學課件
- 醫(yī)學影像技術進展與創(chuàng)新
- 2026年內(nèi)蒙古化工職業(yè)學院高職單招職業(yè)適應性考試參考題庫及答案詳解
- 中國肺血栓栓塞癥診治、預防和管理指南(2025版)
- 2025中北京鐵路局集團招聘934人(本科及以上)筆試參考題庫附帶答案詳解(3卷合一)
- 倉儲管理人員考核細則及績效標準
- 牛黃對肝功能影響研究-洞察及研究
- 泰康培訓課件
- 電子簽名系統(tǒng)安全預案
- (零模)2026屆廣州市高三年級調(diào)研測試物理試卷(含答案)
- 車輛保養(yǎng)套餐服務協(xié)議
- 大型電泳線施工方案設計
- 注冊測繪師測繪綜合能力試卷真題及答案(2025年新版)
評論
0/150
提交評論