XMLSOAP應用簡介

2021-04-08 16:06:09 字數 4416 閱讀 5629

本文中,我們建立乙個簡單的soap服務端和乙個客戶端。服務端用asp編寫,名為soap.asp。這個檔案應存放在個人web伺服器的根目錄下,如:/inetpub/wwwroot。這個伺服器將接受和處理客戶端提出的soap請求。客戶端是乙個簡單的vb可執行檔案,由sub main()啟動。

步驟眾所周知,soap是乙個「呼叫-響應」機制,按客戶/服務方式執行。客戶端(應用程式)向服務端(位於網際網路上的某個web伺服器)發出函式呼叫請求並傳遞引數;服務端則返回響應。呼叫與響應的內容和資料都是按xml檔案格式進行傳送的。因此,要建立乙個簡單的soap應用系統,就要建立乙個客戶端和乙個服務端,即乙個呼叫-響應體系。

下面是乙個簡單例子:

我們建立乙個服務端來計算銷售交易的稅款。按照傳統的vb術語,即建立乙個函式,定義如下:

public function getsalestax(byval psalestotal as double) as double

getsalestax = psalestotal * 0.04

end function

乙個粗糙的函式,但可作為示例(本例只能用於稅率為4%的地方)。

這個函式定義了乙個函式名(getsalestax),乙個引數(psalestotal – 銷售金額)和乙個返回值(函式返回值)。按照物件導向原則,可以認為psalestotal是乙個"in"引數,getsalestax返回值是乙個"out"引數。因此我們的soap服務端就要偵聽客戶發出的呼叫getsalestax的請求和傳遞的"in"引數(銷售金額),然後返回帶有"out"引數的回應,向客戶返回所需稅款。

客戶端下面是用vb建立乙個呼叫服務的客戶端程式:

dblsalestax = getsalestax(100)

得到返回值$4。

如果getsalestax函式是乙個外部物件,比如在mts伺服器上,就要呼叫伺服器上的dll模組:

dim objtax as new ctaxcalc

dblsalestax = objtax.getsalestax(100)

在soap系統中,遠端呼叫的方式略有不同,呼叫是通過xml檔案傳送到伺服器的。xml檔案裡有呼叫的函式名和相應的引數:

100為確保伺服器能夠識別和解釋客戶請求,呼叫指令被包裝到乙個稱之為soap信封的大檔案裡。這個信封使用的是soap封裝標準的通用命名空間:

100最後,加入函式呼叫的命名空間,起到函式宣告的作用:

100現在,已經準備好客戶請求檔案,可以送往服務端了。傳送請求很簡單,可以跟瀏覽器表單一樣,用http  post方式。瀏覽器可以向服務端傳送複雜的表單,.net可以向伺服器傳送vb**,但我使用xmlhttp(ie 5以上版本才能用)。

假設strenvelope含有xml檔案格式的請求,傳送格式如下:

'設定發往本地伺服器

'設定標準soap/ xml檔案頭格式

'設定呼叫函式請求

'呼叫soap

'取得返回值

至此,客戶端完成了向服務端傳送請求的過程。現在回到服務端,看看服務端如何偵聽客戶請求並作出響應。

服務端服務端要能夠接收客戶發出的http請求,在本地伺服器(asp">http://localhost/soap.asp)接收到客戶請求時作出回應。因此服務端要能夠解析客戶端發出的xml格式(soap封裝)的請求,取出呼叫的函式名和引數。

服務端檔案是soap.asp,它接收客戶請求的做法是:

set objreq = server.createobject("microsoft.xmldom")

objreq.load request

然後用xsl樣式從封裝的xml檔案中取出引數:

strquery = "soap:envelope/soap:body/m:getsalestax/salestotal"

varsalestotal = objreq.selectsinglenode(strquery).text

根據引數計算稅款:

varsalestax = varsalestotal * 0.04

在將結果返回給客戶之前,要按soap標準做格式化封裝。過程與客戶端類似,只是把"in"引數改換為"out"引數,並將函式標記名標為回應:

4可以用字串方式構造這個回應檔案,也可以建立乙個dom物件,增加乙個節點。

檔案返回給客戶後,客戶經過解碼就能得到結果:

dim objreturn as new msxml.domdocument

objreturn.loadxml strreturn

strquery = _

"soap:envelope/soap:body/m:getsalestaxresponse/salestax"

dbltax = objreturn.selectsinglenode(strquery).text

這樣就完成了乙個簡單的soap服務應用。雖然visual studio 7掩蓋了內在的soap協議,但我希望本文有助於理解soap的操作過程。

下面是客戶端vb**:

vb client code

sub main()

dim strreturn as string

dim objreturn as new msxml.domdocument

dim dbltax as double

dim strquery as string

'建立soap封裝

strenvelope = _

"" & _

"" & _

"" & _

"" & _

"100" & _

"" & _

"" & _

""'設定發往本地伺服器

'設定標準soap/ xml格式

'設定呼叫函式頭

'soap呼叫

'取出返回信封

'載入到dom

objreturn.loadxml strreturn

'查詢返回值

strquery = _

"soap:envelope/soap:body/m:getsalestaxresponse/salestax"

dbltax = objreturn.selectsinglenode(strquery).text

debug.print dbltax

end sub

下面是服務端asp**(檔名soap.asp,存放在本地伺服器根目錄下):

<%

set objreq = server.createobject("microsoft.xmldom")

'載入請求到xml dom

objreq.load request

'按照輸入引數查詢

strquery = "soap:envelope/soap:body/m:getsalestax/salestotal"

varsalestotal = objreq.selectsinglenode(strquery).text

'計算varsalestax = varsalestotal * 0.04

'準備返回信封

strtmp = _

"" & _

"" & _

"" & _

"" & _

"" & varsalestax & "" & _

"" & _

"" & _

""'回寫結果檔案

response.write strtmp

%>

XML SOAP應用簡介

簡介 soap 簡單物件處理協議 object 本文中,我們建立乙個簡單的soap服務端和乙個客戶端。服務端用 asp編寫,名為soap.asp。這個檔案應存放在個人web伺服器的根目錄下,如 inetpub wwwroot。這個伺服器將接受和處理客戶端提出的soap請求。客戶端是乙個簡單的vb可執...

redis簡介及應用

一.mysql事務 原子性 乙個事務是不可分割的整體,執行操作時就是一起做,或者一起都不做 一致性 意思是張三給李四轉了100元,李四就必須加100元 隔離性 意思是寫資料是隔離開 永續性 意思是資料庫的改變不能返回,改了就改了 redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執...

Git 簡介及應用

git 是乙個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的專案。在使用 git前我們需要先安裝 git。git 目前支援 linux unix solaris mac和 windows 平台上執行。在windows環境下安裝工git可以參考git的安裝教程 安裝好git 後,就要配置g...