《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > SOAP消息處理器的設計與實現
SOAP消息處理器的設計與實現
賀學林
摘要: 介紹了基于XML的SOAP技術的特點和優勢,描述了SOAP應用系統的架構,并揭示了其消息處理過程的機理和技術細節,結合具體的SOAP處理器的實現模型設計和實現了SOAP處理器。
Abstract:
Key words :

  摘  要: 介紹了基于XML的SOAP技術的特點和優勢,描述了SOAP應用系統的架構,并揭示了其消息處理過程的機理和技術細節,結合具體的SOAP處理器的實現模型設計和實現了SOAP處理器。

  關鍵詞: 分布式應用  信息交換  RPC  XML  SOAP協議  WSDL  SOAP處理器

 

  XML和簡單對象訪問協議(Simple Object Access Protocol,SOAP)帶來了信息交換技術革命性的進步,極大地促進了分布式應用的發展。目前,在基于SOAP信息交換應用的集成化開發環境和工具中關于SOAP的技術對開發人員基本上是透明的,即屏蔽和隱藏了SOAP實現和處理的細節。這樣做可以方便開發工作,但卻不利于開發者真正透徹地掌握SOAP的關鍵技術。深入了解SOAP消息的處理過程和SOAP處理器的工作機理,可以對分布式應用進行更加靈活地控制,甚至可以自行開發SOAP消息處理器以適應各種特殊的處理需求。

1  SOAP概述

  SOAP是一種應用程序之間進行數據通信的機制??蓴U展標記語言XML作為數據表達通用的中性語言,使分布式應用的各計算節點在數據的“表示層”得到了統一,也使得基于XML的SOAP成為用于數據交換的、方便的封裝協議。廣義上的SOAP是網絡表示層的協議,是標準的信息交換工具,可以用來實現消息系統,但其目前最主要的應用是進行遠程過程調用(RPC)。應用SOAP技術,可以構建基于消息通信的、松散耦合的、跨平臺的分布式處理系統,這極大地適應了互聯網環境的應用需求。

2  SOAP消息處理模型

2.1 SOAP的應用架構和消息處理模型框架

  SOAP成功地解決了異構網絡環境中的軟件組件和應用程序之間進行可靠信息交換的難題。以Web Service為例,其SOAP RPC的應用架構如圖1所示。一般開發環境都隱藏了SOAP消息處理的過程,這部分功能封裝于由開發環境自動生成的客戶端和服務器端的SOAP代理模塊中,其中都使用了編譯好的高層類庫,用戶據此難以探究其內部的處理細節。

 

  實際上,客戶端和服務器端的SOAP代理模塊內部做了大量的處理工作。SOAP RPC的處理過程如圖2所示??蛻舳四K按照Web Service使用接口(一般用WSDL文檔進行描述)要求的格式和規范,通過XML處理器將客戶端的RPC調用編碼成SOAP請求消息(SOAP消息的串行化)。SOAP請求消息中按規定封裝了請求服務所必需的信息,借助傳輸協議(如HTTP)傳送到服務器端;服務器的傳輸協議監聽器得到傳輸的內容,由服務器端的代理模塊按照WSDL文檔描述的Web Service接口的信息采用XML處理器對SOAP請求消息進行解析,提取出適當的信息,生成提供相應的Web服務的對象,調用請求的方法,得到服務程序的處理結果,再按WSDL文檔的要求將服務處理結果生成(串行化)SOAP響應消息,借助傳輸協議傳回客戶端;客戶端的代理按照WSDL文檔描述的信息解析(反串行化)SOAP響應消息,提取出適當的信息返回客戶程序。在客戶端和服務器端對SOAP消息進行串行化和反串行化期間,涉及到客戶程序的數據類型與XML的類型系統XSD(或SOAP規范的類型系統)之間,以及XML的類型系統XSD與服務程序的數據類型之間的相互映射,還有對象參數的序列化和反序列化工作。

 

 

  當SOAP與HTTP綁定時,服務器端的消息監聽可以采用ASP或ISAPI處理方式。

  SOAP消息的生成和解析工作與WSDL文檔密切相關,只有遵照Web Service對應的WSDL文檔中描述的信息格式,SOAP消息才能得到正確的、自動化的處理。

2.2 WSDL簡介

  WSDL(Web Service Description Language)是一種接口定義語言(IDL)。它以一種XML模式來描述Web Service的接口。服務的使用方根據這些描述信息來理解如何使用服務。由于描述方法和格式具有統一的標準和規范,因此便于由機器來自動處理描述信息。實際上,很多開發環境就是由軟件工具根據服務模塊自動生成相應的WSDL文檔。WSDL文檔使用這些元素來定義Web Service的使用接口:Types、Message、Operation、Port Type、Binding、Port、Service。

  在具體實現SOAP處理器的過程中需要編程訪問WSDL文檔。為使篇幅簡潔,本文將采用MS SOAP TK 3.0中提供的WSDL文檔模型對象接口(詳情可參見MSTK3.0開發文檔)來編程分析WSDL文檔,即通過編程對象及其方法遍歷文檔中的元素,得到的接口描述信息用以處理SOAP消息。

3 實現SOAP處理器的功能

  由圖2所示的SOAP消息處理器的功能和過程架構,可以實現自行開發的SOAP處理器。

3.1 具體的實現模型

  由于SOAP消息和WSDL文檔都是基于XML格式的,所以代理(處理器)的工作主要是分析和處理XML文檔。可以根據SOAP消息封裝格式、編碼規則、RPC表示以及WSDL文檔結構的協議規范,采用任一種XML解析器工具來處理SOAP和WSDL這類特殊的XML文檔(如圖2所示)。本文將采用MSTK3.0中的低層API(封裝了XML處理功能)來實現SOAP代理,處理過程反映了技術機理和細節。將準備實現的客戶端和服務器端的SOAP代理類命名為mySoapClient和mySoapServer。其內部實現過程模型分別如圖3和圖4所示。

 

 

3.2 具體實現

  下面采用VB6.0來實現mySoapClient類和mySoapServer類。

3.2.1 客戶端SOAP代理

  新建ActiveX DLL工程MyClientSoap,添加并引用Microsoft Soap Type Library v3.0。將以下代碼加入mySoapClient類模塊中。

Dim Port As IWSDLPort

Public Sub Initialize(ByVal WSDLFileName As String,

    Optional ByVal ServiceName As String=″″,

     Optional ByVal PortName As String=″″,

    Optional ByVal WSMLFileName As String=″″)

  Dim Fetched As Long

  Dim WSDLReader As New WSDLReader30

  ′load WSDL file

  WSDLReader.Load WSDLFileName,WSMLFileName

  ′get the service

  Dim ServiceEnumerator As IEnumWSDLService,Service As IWSDLService

  WSDLReader.GetSoapServices ServiceEnumerator

  If ServiceName=″″Then

              ServiceEnumerator.Next 1,Service,Fetched

  Else

              ServiceEnumerator.Find ServiceName,Service

  End If

  ′get the port

  Dim PortEnumerator As IEnumWSDLPorts

  Service.GetSoapPorts PortEnumerator

  If PortName=″″Then

              PortEnumerator.Next 1,Port,Fetched

  Else

              PortEnumerator.Find PortName,Port

  End If

End Sub

Public Function Invoke(ByVal OperationName As String,

       ParamArray Parameter() As Variant) As Variant

  ′find the operation

  Dim OperationEnumerator As IEnumWSDLOperations,

  Operation As IWSDLOperation

  Port.GetSoapOperations OperationEnumerator

  OperationEnumerator.Find OperationName,Operation

  ′prepare request

  Dim MapperEnumerator As IEnumSoapMappers,

  Mapper As ISoapMapper

  Operation.GetOperationParts MapperEnumerator

  Dim Fetched As Long

  MapperEnumerator.Next 1,Mapper,Fetched

  Do While Fetched=1

              If (Mapper.IsInput=smInput) Or (Mapper.IsInput=smInOut) Then

                  Mapper.ComValue=Parameter(Mapper.ParameterOrder)

              End If

              MapperEnumerator.Next 1,Mapper,Fetched

  Loop

  ′construct the request message and send it.

  ′(that is,invoking the operation and getting result)

  Dim Serializer As SoapSerializer30

  Dim Connector As SoapConnector30

  Set Connector=New HttpConnector30

  Connector.ConnectWSDL Port

  Connector.BeginMessageWSDL Operation

  Set Serializer=New SoapSerializer30

  Serializer.Init Connector.InputStream

  Serializer.StartEnvelope

  Serializer.StartBody

  Operation.Save Serializer,True′writes the XML

  Serializer.EndBody

  Serializer.EndEnvelope

  ′load response

  Dim SoapReader As New SoapReader30

  SoapReader.Load Connector.OutputStream

  Operation.Load SoapReader,False

  ′return the outgoing parameters and result

  MapperEnumerator.Reset

  MapperEnumerator.Next 1,Mapper,Fetched

  Do While Fetched=1

              If Mapper.IsInput=smOutput Then

                     If Mapper.VariantType=vbObject Then

                         Set Invoke=Mapper.ComValue

                     Else

                        Invoke=Mapper.ComValue

                     End If

              ElseIf Mapper.IsInput=smInOut Then

                        Parameter(Mapper.ParameterOrder)=Mapper.ComValue

              End If

              MapperEnumerator.Next 1,Mapper,Fetched

       Loop

End Function

  將以上代理編譯即可生成MyClientSoap.dll。將mySoapClient類實例化就成為客戶端SOAP代理對象。mySoapClient類向外提供了二個可調用的接口:(1)Initialize方法利用WSDL文檔中描述的Web Service接口消息來初始化客戶端代理對象,用戶還可指定要遠程調用的Web Service的服務名稱ServiceName和端口名稱PortName。(2)Invoke方法向客戶程序提供了使用Web Service的接口,用戶只需提供Web Service中的方法名稱和此方法的參數,就可以調用Web Service。

3.2.2 服務器端SOAP代理

  新建ActiveX DLL工程MyServerSoap,并添加引用Microsoft Soap Type Library v3.0。

將以下代碼加入mySoapServer類模塊中。

Dim WSDLReader As WSDLReader30

Public Sub Initialize(ByVal WSDLFileName As String,ByVal WSMLFileName As String)

  Set WSDLReader=New WSDLReader30

  WSDLReader.SetProperty ″LoadOnServer″,True

    WSDLReader.Load WSDLFileName,WSMLFileName

End Sub

Public Sub ProcessRequest(ByVal Request As IStream,ByVal Response As IStream)

  Dim WSDLPort As IWSDLPort

  Dim WSDLOperation As IWSDLOperation

  Dim Serializer As New SoapSerializer30

  Dim SoapReader As New SoapReader30

  SoapReader.Load Request

  WSDLReader.ParseRequest SoapReader,WSDLPort,

  WSDLOperation

  WSDLOperation.Load SoapReader,True

  Serializer.Init Response

  Serializer.StartEnvelope

  WSDLOperation.ExecuteOperation SoapReader,Serializer

  Serializer.StartBody

  WSDLOperation.Save Serializer,False

  Serializer.EndBody

  Serializer.EndEnvelope

End Sub

  編譯后生成MyServerSoap.dll。將mySoapServer類實例化就成為服務器端SOAP代理對象。Initialize方法利用WSDL文檔來初始化服務器端代理對象。ProcessRequest方法分析接收到的SOAP請求消息,調用相應的Web Service方法,將結果編碼成SOAP響應消息回傳。

  以上詳細剖析了SOAP消息的處理過程,設計實現了SOAP處理器。實際上,本文中實現代理類的代碼還可進一步細化,甚至完全可以不引用MSTK3.0中的低層API類庫,而采用XML解析器來編寫SOAP處理器。由于篇幅所限,還有一些細節問題未能進一步展開探討,如復雜數據類型的編碼、SOAP頭部的處理、錯誤的捕獲和附件的處理等。本文已實現了SOAP處理器最重要的核心功能框架(消息的構建、傳輸和解析等),用戶可以在此基礎上,增加調用附加功能的接口,這樣可以實現功能更加豐富的SOAP處理器。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品男gay被猛男狂揉视频| 欧美日韩免费高清一区色橹橹| 久久综合网络一区二区| 男女av一区三区二区色多| 久久精品在线视频| 欧美丰满少妇xxxbbb| 欧美性大战久久久久久久| 久久久久高清| av成人国产| 国产自产精品| 亚洲曰本av电影| 狠狠色综合网站久久久久久久| 免费观看久久久4p| 国产精品视频你懂的| 欧美日韩国产一区二区三区地区| 国产精品视频999| 欧美在线观看一区| 老司机一区二区三区| 欧美美女日韩| 久久久久久噜噜噜久久久精品| 久久成人精品一区二区三区| 午夜一区二区三视频在线观看| 久久精品123| 精品福利电影| 欧美另类极品videosbest最新版本| 欧美成人自拍视频| 欧美视频中文字幕在线| 免费高清在线视频一区·| 亚洲字幕在线观看| 欧美国产大片| 亚洲综合国产激情另类一区| 亚洲国产va精品久久久不卡综合| 欧美日韩精品一区二区天天拍小说| 欧美精品日日鲁夜夜添| 亚洲视频欧洲视频| 亚洲国产精品999| 免费观看日韩| 亚洲午夜精品一区二区三区他趣| 在线观看日韩www视频免费| 亚洲激情社区| 国产亚洲欧美另类一区二区三区| 亚洲高清影视| 国产精品丝袜白浆摸在线| 久久天天躁狠狠躁夜夜av| 久久久精品一品道一区| 一区二区三区四区五区在线| 99在线精品观看| 亚洲精选大片| 国产精品国产三级国产a| 在线观看精品视频| 欧美精品乱人伦久久久久久| 国产欧美日韩麻豆91| 亚洲精品在线观看视频| 欧美性理论片在线观看片免费| 欧美高清在线一区| 在线视频精品一区| 欧美久久久久久久久| 欧美三日本三级少妇三99| 亚洲精选国产| 亚洲视频一二三| 国产区精品视频| 久久久久久噜噜噜久久久精品| 国产亚洲成人一区| 在线看国产一区| 亚洲欧洲在线免费| 亚洲国产另类久久久精品极度| 亚洲欧美自拍偷拍| 今天的高清视频免费播放成人| 日韩视频免费看| 欧美在线关看| 亚洲视频播放| 亚洲欧美一级二级三级| 国产精品私人影院| 亚洲精品国久久99热| 欧美国产日韩视频| 欧美一区二区三区久久精品| 国产精品亚洲精品| 久久综合伊人77777蜜臀| 欧美日韩日本国产亚洲在线| 在线欧美日韩国产| 欧美日韩人人澡狠狠躁视频| 欧美1级日本1级| 亚洲激情在线观看| 国产日韩一区二区三区在线| 久久色在线播放| 国产亚洲欧美一区二区三区| 91久久一区二区| 国产伦精品一区二区三区免费| 国产亚洲欧美日韩在线一区| 国产日韩欧美综合一区| 国产在线观看一区| 最新高清无码专区| 国产精品免费电影| 欧美性一区二区| 亚洲国产成人精品女人久久久| 精品51国产黑色丝袜高跟鞋| 亚洲午夜精品| 国产精品看片资源| 中文高清一区| 国产综合色产在线精品| 欧美视频观看一区| 国产精品久久久久久久久久三级| 最新精品在线| 亚洲欧美日韩在线不卡| 欧美三日本三级三级在线播放| 亚洲三级毛片| 激情综合色综合久久综合| 一个人看的www久久| 悠悠资源网久久精品| 欧美三区在线| 免费看亚洲片| 国产精品国产自产拍高清av| 国内外成人免费视频| 91久久久久久国产精品| 国产主播一区二区| 国产精品高潮呻吟久久| 日韩视频一区二区在线观看| 国产日韩一区| 日韩一级视频免费观看在线| 午夜精品一区二区在线观看| 免费视频一区二区三区在线观看| 最新高清无码专区| 欧美另类久久久品| 国产精品美女www爽爽爽| 午夜国产不卡在线观看视频| 亚洲激情亚洲| 久久久久国产精品麻豆ai换脸| 欧美日韩免费一区二区三区| 狠狠色狠狠色综合日日tαg| 国产日韩在线看片| 亚洲国产成人一区| 欧美日韩精品一区二区三区| 1000部国产精品成人观看| 久久久久久久久蜜桃| 欧美中文字幕第一页| 在线欧美日韩国产| 老牛嫩草一区二区三区日本| 黄色精品一二区| 亚洲小说欧美另类婷婷| 亚洲欧洲精品成人久久奇米网| 日韩一级裸体免费视频| 国产在线麻豆精品观看| 亚洲国产高清一区二区三区| 国产一区二区三区免费在线观看| 日韩一本二本av| 欧美自拍偷拍| 午夜国产精品视频免费体验区| 国内精品视频久久| 国产一级揄自揄精品视频| 国产精品―色哟哟| 亚洲资源av| 国产一区二区在线免费观看| 久久精品九九| 99国产精品国产精品毛片| 极品少妇一区二区三区| 欧美日韩国产不卡| 亚洲国产一区二区a毛片| 亚洲国产裸拍裸体视频在线观看乱了| 欧美黄色免费| 国产精品狼人久久影院观看方式| 国产精品美女久久久久久久| 国产伦精品一区二区| 欧美 日韩 国产 一区| 一区二区亚洲精品| 欧美二区乱c少妇| 久久婷婷综合激情| 国产精品网站视频| 亚洲精品四区| 国产精品日日摸夜夜摸av| 欧美日韩精品一区二区天天拍小说| 国产在线不卡视频| 欧美激情一二区| 在线一区欧美| 欧美精品日韩一区| 欧美影片第一页| 宅男噜噜噜66国产日韩在线观看| 今天的高清视频免费播放成人| 午夜精品久久99蜜桃的功能介绍| 国产精品草莓在线免费观看| 国产亚洲欧美日韩一区二区| 国产真实乱偷精品视频免| 亚洲激情视频在线| 欧美日韩在线第一页| 亚洲第一色在线| 99国产精品久久久久老师| 国产午夜精品理论片a级探花| 久久综合给合久久狠狠狠97色69| 一本一本久久| 久久夜色精品国产噜噜av| 在线电影欧美日韩一区二区私密| 亚洲区在线播放| 亚洲精品中文字幕有码专区| 永久免费毛片在线播放不卡| 国产精品一区久久久久| 亚洲黄页一区| 亚洲精品国产视频| 欧美一区二区三区四区在线观看地址| 激情久久久久久久| 亚洲一区二区高清| 99这里只有久久精品视频| 国产乱码精品一区二区三区五月婷| 免费人成网站在线观看欧美高清| 亚洲国产美女精品久久久久∴| 国产精品夜夜夜一区二区三区尤| 欧美午夜精品一区二区三区| 欧美成人在线免费视频| 久久精品国产综合| 韩国亚洲精品| 欧美福利视频在线| 国产综合视频| 欧美日韩另类丝袜其他| 亚洲精品国久久99热| 国产麻豆精品久久一二三| 亚洲欧美国产一区二区三区| 久久精品国产欧美激情| 狠狠色伊人亚洲综合网站色| 午夜在线观看免费一区| 国产精品视频午夜| 亚洲高清毛片| 黄色成人精品网站| 欧美久久九九| 久久aⅴ乱码一区二区三区| 一区二区三区高清不卡| 国产日韩欧美精品| 日韩视频二区| 一本一本久久a久久精品牛牛影视| 在线观看一区二区视频| 欧美黄色小视频| 国产精品美女主播| 国产人成一区二区三区影院| 国产精品久久久久av免费| 欧美午夜在线观看| 久久国产精品99久久久久久老狼| 欧美高清在线视频观看不卡| 久久久久久网站| 亚洲国产精品www| 亚洲一区成人| 欧美ab在线视频| 最新热久久免费视频| 国产亚洲一区二区在线观看| 国产精品日产欧美久久久久| 亚洲国产精品久久久久| 在线观看中文字幕亚洲| 91久久精品国产91久久性色tv| 国产日韩欧美另类| 欧美精品999| 麻豆精品视频| 国产伦精品一区二区| 欧美精品18videos性欧美| 欧美不卡一区| 国产精品99久久久久久久久久久久| 国产欧美日本| 精品88久久久久88久久久| 欧美美女bbbb| 亚洲图片激情小说| 久久综合九色| 一区免费视频| 日韩一级视频免费观看在线| 麻豆精品传媒视频| 老司机67194精品线观看| 亚洲欧洲免费视频| 欧美午夜理伦三级在线观看| 国产精品看片你懂得| 久久五月婷婷丁香社区| 麻豆精品一区二区综合av| 欧美乱人伦中文字幕在线| 国产精品www994| 国产精品视频久久一区| 欧美成人黄色小视频| 欧美亚洲成人网| 国产欧美1区2区3区| 欧美午夜精品久久久久久超碰| 免费的成人av| 亚洲欧美日韩在线高清直播| 久久国产主播精品| 欧美精品一区二区三区一线天视频| 久久一区二区视频| 中文精品99久久国产香蕉| 国产日韩精品一区二区三区在线| 国产精品一区二区久激情瑜伽| 国产欧美日韩综合一区在线播放| 欧美二区在线播放| 国产一区再线| 亚洲欧美国产va在线影院| 夜夜夜久久久| 欧美啪啪一区| 欧美日韩视频在线| 欧美精品久久久久久久久老牛影院| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲午夜未删减在线观看| 国产自产v一区二区三区c| 欧美日韩午夜剧场| 亚洲国产天堂久久国产91| 亚洲第一区在线| 国产精品日韩欧美一区| 99这里只有久久精品视频| 国产精品电影观看| 夜夜嗨av一区二区三区四季av| 日韩亚洲精品视频| 久久米奇亚洲| 中文国产成人精品久久一| 亚洲一区二区三区精品在线观看| 夜夜狂射影院欧美极品| 国产在线视频欧美| 欧美激情综合色| 国产毛片精品国产一区二区三区| 蜜桃av综合| 久久久美女艺术照精彩视频福利播放| 国产精品美女久久久久久免费| 极品少妇一区二区| 国产一区二区日韩精品| 久久高清国产| 欧美一激情一区二区三区| 国产在线播精品第三| 美女露胸一区二区三区| 欧美在线啊v一区| 亚洲精品久久久久久久久久久久久| 亚洲高清免费视频| 激情综合网激情| 欧美精品日韩综合在线| 欧美中文在线免费| 99精品国产一区二区青青牛奶| 亚洲精选中文字幕| 亚洲国产小视频| 在线欧美影院| 亚洲婷婷综合色高清在线| 亚洲国产91精品在线观看| 欧美日韩伊人|