免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Soap 是什么

介紹一下SOAP,是什么來的,有什么應(yīng)用呢?

如果想了解SOAP到底是什么,就要自己動手建立自己的SOAP標(biāo)準(zhǔn)對象。本文可以幫助你起步。  
 
 
 
簡介  
 
SOAP  -  簡單對象處理協(xié)議(Simple  Object  Access  Protocol)  -  是當(dāng)前XML開發(fā)的熱點。它是微軟新一代Visual  Studio的主要角色,是".NET"策略的基礎(chǔ)。如果想用VB  6編制一個有保障的SOAP服務(wù),可以查閱微軟的SOAP工具包(VB)。但如果想了解SOAP到底是什么,就要自己動手建立自己的SOAP標(biāo)準(zhǔn)對象。本文可以幫助你起步。  
本文中,我們創(chuàng)建一個簡單的SOAP服務(wù)端和一個客戶端。服務(wù)端用ASP編寫,名為soap.asp。這個文件應(yīng)存放在個人Web服務(wù)器的根目錄下,如:\Inetpub\wwwroot。這個服務(wù)器將接受和處理客戶端提出的SOAP請求。客戶端是一個簡單的VB可執(zhí)行文件,由Sub  Main()啟動。  
 
步驟  
眾所周知,SOAP是一個“呼叫-響應(yīng)”機(jī)制,按客戶/服務(wù)方式運行??蛻舳?應(yīng)用程序)向服務(wù)端(位于互聯(lián)網(wǎng)上的某個Web服務(wù)器)發(fā)出函數(shù)調(diào)用請求并傳遞參數(shù);服務(wù)端則返回響應(yīng)。呼叫與響應(yīng)的內(nèi)容和數(shù)據(jù)都是按XML文件格式進(jìn)行傳送的。因此,要建立一個簡單的SOAP應(yīng)用系統(tǒng),就要建立一個客戶端和一個服務(wù)端,即一個呼叫-響應(yīng)體系。  
 
下面是一個簡單例子:  
 
我們建立一個服務(wù)端來計算銷售交易的稅款。按照傳統(tǒng)的VB術(shù)語,即建立一個函數(shù),定義如下:  
 
           Public  Function  GetSalesTax(ByVal  pSalesTotal  As  Double)  as  Double  
 
                   GetSalesTax  =  pSalesTotal  *  0.04  
 
           End  Function  
 
 
 
一個粗糙的函數(shù),但可作為示例(本例只能用于稅率為4%的地方)。  
 
這個函數(shù)定義了一個函數(shù)名(GetSalesTax),一個參數(shù)(pSalesTotal  –  銷售金額)和一個返回值(函數(shù)返回值)。按照面向?qū)ο笤瓌t,可以認(rèn)為pSalesTotal是一個"IN"參數(shù),GetSalesTax返回值是一個"OUT"參數(shù)。因此我們的SOAP服務(wù)端就要偵聽客戶發(fā)出的調(diào)用GetSalesTax的請求和傳遞的"IN"參數(shù)(銷售金額),然后返回帶有"OUT"參數(shù)的回應(yīng),向客戶返回所需稅款。  
 
 
 
客戶端  
 
下面是用VB建立一個呼叫服務(wù)的客戶端程序:  
 
           dblSalesTax  =  GetSalesTax(100)  
 
           得到返回值$4。  
 
             
 
           如果GetSalesTax函數(shù)是一個外部對象,比如在MTS服務(wù)器上,就要調(diào)用服務(wù)器上的DLL模塊:  
 
           Dim  objTax  As  New  CTaxCalc  
 
           dblSalesTax  =  objTax.GetSalesTax(100)  
 
 
 
在SOAP系統(tǒng)中,遠(yuǎn)程調(diào)用的方式略有不同,呼叫是通過XML文件傳送到服務(wù)器的。XML文件里有調(diào)用的函數(shù)名和相應(yīng)的參數(shù):  
 
           <GetSalesTax>  
 
                   <SalesTotal>100</SalesTotal>  
 
           <GetSalesTax>  
 
 
 
為確保服務(wù)器能夠識別和解釋客戶請求,呼叫指令被包裝到一個稱之為SOAP信封的大文件里。這個信封使用的是SOAP封裝標(biāo)準(zhǔn)的通用命名空間:  
 
           <SOAP:Envelope  xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1">  
 
                   <SOAP:Header></SOAP:Header>  
 
                   <SOAP:Body>  
 
                           <GetSalesTax>  
 
                                   <SalesTotal>100</SalesTotal>  
 
                           <GetSalesTax>  
 
                   </SOAP:Body>  
 
           </SOAP:Envelope>  
 
 
 
最后,加入函數(shù)調(diào)用的命名空間,起到函數(shù)聲明的作用:  
 
           <SOAP:Envelope  xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1">  
 
                   <SOAP:Header></SOAP:Header>  
 
                   <SOAP:Body>  
 
                           <m:GetSalesTax  xmlns:m="urn:myserver/soap:TaxCalc">  
 
                                   <SalesTotal>100</SalesTotal>  
 
                           </m:GetSalesTax>  
 
                   </SOAP:Body>  
 
           </SOAP:Envelope>  
 
 
 
現(xiàn)在,已經(jīng)準(zhǔn)備好客戶請求文件,可以送往服務(wù)端了。發(fā)送請求很簡單,可以跟瀏覽器表單一樣,用HTTP  post方式。瀏覽器可以向服務(wù)端發(fā)送復(fù)雜的表單,.NET可以向服務(wù)器發(fā)送VB代碼,但我使用XMLHTTP(IE  5以上版本才能用)。  
 
 
 
假設(shè)strEnvelope含有XML文件格式的請求,發(fā)送格式如下:  
 
           Dim  objHTTP  As  New  MSXML.XMLHTTPRequest  
 
           Dim  strEnvelope  As  String  
 
 
 
           '設(shè)定發(fā)往本地服務(wù)器  
 
           objHTTP.open  "post",  "http://localhost/soap/soap.asp"  
 
 
 
           '設(shè)定標(biāo)準(zhǔn)SOAP/  XML文件頭格式  
 
           objHTTP.setRequestHeader  "Content-Type",  "text/xml"  
 
 
 
           '設(shè)置呼叫函數(shù)請求  
 
           objHTTP.setRequestHeader  "SOAPMethodName",  _  
 
                   "urn:myserver/soap:TaxCalc#GetSalesTax"  
 
 
 
           '呼叫SOAP  
 
           objHTTP.send  strEnvelope  
 
 
 
           '取得返回值  
 
           strReturn  =  objHTTP.responseBody  
 
 
 
至此,客戶端完成了向服務(wù)端發(fā)送請求的過程?,F(xiàn)在回到服務(wù)端,看看服務(wù)端如何偵聽客戶請求并作出響應(yīng)。  
 
 
 
服務(wù)端  
 
服務(wù)端要能夠接收客戶發(fā)出的HTTP請求,在本地服務(wù)器(http://localhost/soap.asp)接收到客戶請求時作出回應(yīng)。因此服務(wù)端要能夠解析客戶端發(fā)出的XML格式(SOAP封裝)的請求,取出調(diào)用的函數(shù)名和參數(shù)。  
 
 
 
服務(wù)端文件是soap.asp,它接收客戶請求的做法是:  
 
           Set  objReq  =  Server.CreateObject("Microsoft.XMLDOM")    
 
           objReq.Load  Request  
 
 
 
然后用XSL樣式從封裝的XML文件中取出參數(shù):  
 
           strQuery  =  "SOAP:Envelope/SOAP:Body/m:GetSalesTax/SalesTotal"    
 
           varSalesTotal  =  objReq.SelectSingleNode(strQuery).Text  
 
 
 
根據(jù)參數(shù)計算稅款:  
 
           varSalesTax  =  varSalesTotal  *  0.04  
 
 
 
在將結(jié)果返回給客戶之前,要按SOAP標(biāo)準(zhǔn)做格式化封裝。過程與客戶端類似,只是把"IN"參數(shù)改換為"OUT"參數(shù),并將函數(shù)標(biāo)記名標(biāo)為回應(yīng):  
 
           <SOAP:Envelope  xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1">  
 
                 <SOAP:Header></SOAP:Header>  
 
                 <SOAP:Body>  
 
                       <m:GetSalesTaxResponse  xmlns:m="urn:myserver/soap:TaxCalc">  
 
                             <SalesTax>4</SalesTax>  
 
                       </m:GetSalesTaxResponse>  
 
                 </SOAP:Body>  
 
           </SOAP:Envelope>  
 
 
 
可以用字符串方式構(gòu)造這個回應(yīng)文件,也可以創(chuàng)建一個DOM對象,增加一個節(jié)點。  
 
文件返回給客戶后,客戶經(jīng)過解碼就能得到結(jié)果:  
 
           Dim  objReturn  As  New  MSXML.DomDocument  
 
           objReturn.LoadXML  strReturn  
 
           strQuery  =  _  
 
               "SOAP:Envelope/SOAP:Body/m:GetSalesTaxResponse/SalesTax"    
 
           dblTax  =  objReturn.SelectSingleNode(strQuery).Text  
 
 
 
這樣就完成了一個簡單的SOAP服務(wù)應(yīng)用。雖然Visual  Studio  7掩蓋了內(nèi)在的SOAP協(xié)議,但我希望本文有助于理解SOAP的操作過程。  
 
 
 
下面是客戶端VB代碼:  
 
           VB  Client  Code  
 
           Sub  Main()  
 
               Dim  objHTTP  As  New  MSXML.XMLHTTPRequest  
 
               Dim  strEnvelope  As  String  
 
               Dim  strReturn  As  String  
 
               Dim  objReturn  As  New  MSXML.DOMDocument  
 
               Dim  dblTax  As  Double  
 
               Dim  strQuery  As  String  
 
                 
 
               '創(chuàng)建SOAP封裝  
 
               strEnvelope  =  _  
 
                   "<soap:envelope  xmlns:soap=""urn:schemas-xmlsoap-org:soap.v1"">"  =  _  
 
                   "<soap:header></soap:header>"  =  _  
 
                   "<soap:body>"  =  _  
 
                   "<m:getsalestax  xmlns:m=""urn:myserver/soap:TaxCalculator"">"  =  _  
 
                   "<salestotal>100</salestotal>"  =  _  
 
                   "</m:getsalestax>"  =  _  
 
                   "</soap:body>"  =  _  
 
                   "</soap:envelope>"  
 
                 
 
               '設(shè)定發(fā)往本地服務(wù)器  
 
               objHTTP.open  "post",  "http://localhost/soap.asp",  False  
 
                 
 
               '設(shè)定標(biāo)準(zhǔn)SOAP/  XML格式  
 
               objHTTP.setRequestHeader  "Content-Type",  "text/xml"  
 
                 
 
               '設(shè)置調(diào)用函數(shù)頭  
 
               objHTTP.setRequestHeader  "SOAPMethodName",  _  
 
                   "urn:myserver/soap:TaxCalculator#GetSalesTax"  
 
                 
 
               'SOAP呼叫  
 
               objHTTP.send  strEnvelope  
 
                 
 
               '取出返回信封  
 
               strReturn  =  objHTTP.responseText  
 
                 
 
               '加載到DOM  
 
               objReturn.loadXML  strReturn  
 
                 
 
               '查詢返回值  
 
               strQuery  =  _  
 
                   "SOAP:Envelope/SOAP:Body/m:GetSalesTaxResponse/SalesTax"  
 
               dblTax  =  objReturn.selectSingleNode(strQuery).Text  
 
                 
 
               Debug.Print  dblTax  
 
           End  Sub  
 
           
 
           
 
         下面是服務(wù)端ASP代碼(文件名soap.asp,存放在本地服務(wù)器根目錄下):  
 
           <%  
 
           Set  objReq  =  Server.CreateObject("Microsoft.XMLDOM")  
 
 
 
           '加載請求到XML  DOM  
 
           objReq.Load  Request  
 
 
 
           '按照輸入?yún)?shù)查詢  
 
           strQuery  =  "SOAP:Envelope/SOAP:Body/m:GetSalesTax/SalesTotal"  
 
           varSalesTotal  =  objReq.SelectSingleNode(strQuery).Text  
 
 
 
           '計算  
 
           varSalesTax  =  varSalesTotal  *  0.04  
 
 
 
           '準(zhǔn)備返回信封  
 
           strTmp  =  _  
 
           "<soap:envelope  xmlns:soap=""urn:schemas-xmlsoap-org:soap.v1"">"  =  _  
 
           "<soap:header></soap:header>"  =  _  
 
           "<soap:body>"  =  _  
 
           "<m:getsalestaxresponse  xmlns:m=""urn:myserver/soap:TaxCalc"">"  =  _  
 
           "<salestax>"  =  varSalesTax  =  "</salestax>"  =  _  
 
           "</m:getsalestaxresponse>"  =  _  
 
           "</soap:body>"  =  _  
 
           "</soap:envelope>"  

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WebService工作原理
webservice筆記
使用 AJAX 調(diào)用 SOAP Web 服務(wù),第 1 部分: 構(gòu)建 Web 服務(wù)客戶機(jī)
DLNA
簡單對象協(xié)議(SOAP)簡介
JAVA6開發(fā)WebService (三)——幾個概念
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服