當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA信息化
微軟基于Web計(jì)算的框架結(jié)構(gòu)分析
申請(qǐng)免費(fèi)試用、咨詢(xún)電話:400-8352-114
AMTeam.org微軟基于Web計(jì)算的框架結(jié)構(gòu)分析
一、引言
隨著Internet的發(fā)展,軟件系統(tǒng)已經(jīng)從客戶服務(wù)器系統(tǒng)發(fā)展到服務(wù)器/瀏覽器系統(tǒng),但是隨著基于Internet應(yīng)用的深化和基于Web計(jì)算的概念的提出,新的計(jì)算模型不再是簡(jiǎn)單的依賴(lài)于瀏覽器作為客戶端。
首先,我們來(lái)簡(jiǎn)單看一下計(jì)算模型的發(fā)展歷史,一開(kāi)始,由于個(gè)人計(jì)算機(jī)還尚未普及,而且計(jì)算機(jī)價(jià)格都比較昂貴,我們一般采用主機(jī)模式來(lái)進(jìn)行計(jì)算,也就是說(shuō)客戶實(shí)際上是通過(guò)終端和大型主機(jī)進(jìn)行連接,主機(jī)分配一定的CPU時(shí)間和磁盤(pán)空間給用戶,所有用戶的計(jì)算實(shí)際上都是在主機(jī)上完成的。這樣對(duì)主機(jī)的要求非常高,要求主機(jī)上的操作系統(tǒng)必須是高度可靠、安全的。在這個(gè)時(shí)候,流行的是IBM的大型機(jī)的操作系統(tǒng),這里注意的是,即使到現(xiàn)在,很多銀行依然通過(guò)這個(gè)模式進(jìn)行運(yùn)做,因?yàn)槿菀走M(jìn)行集中管理和維護(hù),客戶端實(shí)際上僅僅是一個(gè)終端的功能,從某一個(gè)角度講就是主機(jī)屏幕的延伸。
隨著分布式概念的提出和微機(jī)功能的增強(qiáng),軟件業(yè)又提出了客戶/服務(wù)器的計(jì)算模型,把一些非關(guān)鍵的任務(wù)(比如圖形界面的顯示,數(shù)據(jù)的顯示格式確定,數(shù)據(jù)的處理等等)放到客戶端進(jìn)行執(zhí)行,這樣相對(duì)就減輕了對(duì)服務(wù)器的負(fù)擔(dān)。但是這種模式一般是基于局域網(wǎng)范圍內(nèi)進(jìn)行的(比如在九十年代非常流行的一些基于數(shù)據(jù)庫(kù)的信息系統(tǒng)就是根據(jù)這種模式構(gòu)建的)。
隨著Internet的發(fā)展和企業(yè)之間電子交互的需求的出現(xiàn),出現(xiàn)了基于數(shù)據(jù)庫(kù)/Web服務(wù)器/瀏覽器這樣的計(jì)算模型,這種模型實(shí)際上是基于全球網(wǎng)絡(luò)范圍內(nèi)進(jìn)行的,客戶端統(tǒng)一的以瀏覽器的形式表現(xiàn)給用戶,用戶通過(guò)HTTP協(xié)議把任務(wù)提交給Web服務(wù)器,Web服務(wù)器通過(guò)和數(shù)據(jù)庫(kù)和應(yīng)用服務(wù)器的交互把結(jié)果通過(guò)HTTP協(xié)議傳遞給客戶端,然后客戶端再通過(guò)瀏覽器顯示結(jié)果。在這種模式下的關(guān)鍵是數(shù)據(jù)傳遞的安全性和事務(wù)性這兩個(gè)問(wèn)題,因?yàn)镠TTP本質(zhì)是是一個(gè)無(wú)狀態(tài)的連接,所以事務(wù)處理就變得非常重要,同時(shí)因?yàn)檎麄€(gè)業(yè)務(wù)是基于全球網(wǎng)絡(luò)體系結(jié)構(gòu)的,所以安全性也變成一個(gè)值得關(guān)注的問(wèn)題。
隨著Internet上計(jì)算任務(wù)的復(fù)雜化和業(yè)務(wù)的多樣化,自然而然就產(chǎn)生了以Web為中心進(jìn)行計(jì)算的需求。從本質(zhì)上說(shuō),對(duì)Internet應(yīng)用的復(fù)雜化使我們當(dāng)前的操作系統(tǒng)都顯得力不從心,因?yàn)槲覀儺?dāng)前的操作系統(tǒng)一般都是基于單機(jī)或者局域網(wǎng)系統(tǒng)的,而如何把操作系統(tǒng)擴(kuò)展到整個(gè)Internet計(jì)算這個(gè)范疇內(nèi),就成了所有操作系統(tǒng)軟件生產(chǎn)廠商所必須考慮的問(wèn)題。
基于Web的軟件系統(tǒng)的例子有很多,比如Napster,它允許在用戶之間進(jìn)行磁盤(pán)內(nèi)容的共享,從某一種角度講,它的基本概念是要建立一個(gè)基于Web的文件系統(tǒng),這個(gè)文件系統(tǒng)包含了所有參與者本身的文件系統(tǒng)。這樣參與者之間就可以進(jìn)行文件的共享,通過(guò)輸入一定的查詢(xún)條件,我們就可以在其他的用戶的存儲(chǔ)設(shè)備上找到相應(yīng)的文件并進(jìn)行下載(當(dāng)然這種概念在局域網(wǎng)中早就存在,現(xiàn)在Napster把這個(gè)概念擴(kuò)展到了整個(gè)Internet領(lǐng)域而已)。
二、Web服務(wù)體系結(jié)構(gòu)分析
這種基于Internet類(lèi)型應(yīng)用的出現(xiàn)使我們需要一個(gè)嶄新的框架結(jié)構(gòu)來(lái)進(jìn)行程序的設(shè)計(jì),我們需要一個(gè)快速和方便的方法進(jìn)行代碼的編寫(xiě)并且能夠和Internet上其他的程序進(jìn)行交互。當(dāng)然在計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)和信息交互這個(gè)概念并不是很新,比如通過(guò)RPC,DCOM和CORBA等都可以實(shí)現(xiàn)不同計(jì)算機(jī)上的進(jìn)程之間的交互。但是它們都有一個(gè)致命的缺點(diǎn):它們需要進(jìn)行交互的機(jī)器具有相似的系統(tǒng),比如MSMQ只能和MSMQ進(jìn)行對(duì)話,DCOM客戶端只能和DCOM服務(wù)器端進(jìn)行交互。
而我們真正需要的是一個(gè)通用的開(kāi)發(fā)框架,也就是說(shuō)不管系統(tǒng)的那一端是什么東西,我們這一端都可以和它進(jìn)行信息的交互。它的本質(zhì)意義就是說(shuō)兩端的操作系統(tǒng)不僅可以是異構(gòu)的(比如一端可以是Windows,另一端可以是UNIX),而且實(shí)現(xiàn)的語(yǔ)言也可以是異構(gòu)的(一端可以用C++實(shí)現(xiàn),另一端可以用VB實(shí)現(xiàn))。
如果大家還記得在DCOM進(jìn)行交互時(shí)的數(shù)據(jù)列集(Marshal)這個(gè)概念的話,那么就可以理解基于Internet異構(gòu)系統(tǒng)通訊的關(guān)鍵點(diǎn)是什么了。一個(gè)就是通訊的標(biāo)準(zhǔn),兩個(gè)進(jìn)程需要采用標(biāo)準(zhǔn)的協(xié)議進(jìn)行通訊,另外一個(gè)就是數(shù)據(jù)的打包,數(shù)據(jù)應(yīng)該采用一致的形式進(jìn)行打包和解包。當(dāng)前基于Internet最流行的傳輸協(xié)議就是HTTP,所有的Web瀏覽器都通過(guò)這個(gè)協(xié)議和Web服務(wù)器進(jìn)行通訊并得到相關(guān)的網(wǎng)頁(yè)。而數(shù)據(jù)的打包也需要采用一定的標(biāo)準(zhǔn),當(dāng)前出現(xiàn)的跨平臺(tái)的信息編碼的標(biāo)準(zhǔn)就是XML。因?yàn)镠TTP和XML都是工業(yè)的標(biāo)準(zhǔn),并不和任何平臺(tái),廠商掛鉤,所以基于這兩種標(biāo)準(zhǔn)構(gòu)建的系統(tǒng)無(wú)疑在任何環(huán)境是都是有生命力的。
為了創(chuàng)建一個(gè)Web服務(wù),我們所需要做的工作就是編寫(xiě)一個(gè).Net服務(wù)對(duì)象,使它被異地進(jìn)程的調(diào)用就象能夠被本地的客戶端直接調(diào)用一樣。實(shí)際上是通過(guò)給它標(biāo)記一定的屬性來(lái)實(shí)現(xiàn)的,使它能夠被Web客戶端所使用。通過(guò)ASP.NET,這個(gè).Net服務(wù)對(duì)象就能夠接受來(lái)自客戶端的請(qǐng)求(通過(guò)HTTP協(xié)議傳輸?shù)模R簿褪钦f(shuō).Net服務(wù)對(duì)象能夠和任何使用HTTP和XML標(biāo)準(zhǔn)的進(jìn)程進(jìn)行通訊,你也不需要考慮Web通訊的體系結(jié)構(gòu),操作系統(tǒng)已經(jīng)幫你搞定了這一切。
從服務(wù)對(duì)象的角度來(lái)講,一個(gè)客戶和服務(wù)對(duì)象之間的通訊可以用下面的形式表示:
1. 從客戶端的HTTP請(qǐng)求到達(dá),其中參數(shù)可能包含在URL中,也可能包含在一個(gè)單獨(dú)的XML文件中
2.
ASP.NET根據(jù).asmx文件的指定創(chuàng)建對(duì)象
3. ASP.NET調(diào)用對(duì)象的某一個(gè)特定的方法
4. 對(duì)象把結(jié)果返回給ASP.NET
在客戶端,.NET提供了Proxy類(lèi)用來(lái)快速方便的和服務(wù)器提供的Web服務(wù)進(jìn)行交互,通過(guò)開(kāi)發(fā)工具得到Web服務(wù)的描述,然后就可以產(chǎn)生一個(gè)包含一些功能函數(shù)的Proxy類(lèi),注意,在這里我們可以使用任何類(lèi)型的語(yǔ)言來(lái)開(kāi)發(fā)客戶端,當(dāng)客戶端調(diào)用其中的某一個(gè)函數(shù)的時(shí)候,Proxy就會(huì)產(chǎn)生一個(gè)HTTP請(qǐng)求并把它發(fā)送給服務(wù)器,當(dāng)服務(wù)器響應(yīng)返回的時(shí)候,Proxy能夠?qū)Y(jié)果進(jìn)行解析并返回給調(diào)用該函數(shù)的客戶端。這樣,就保證了客戶端能夠通過(guò)HTTP和XML無(wú)縫的和Web服務(wù)器進(jìn)行信息的交互。
從客戶端的角度來(lái)講,一個(gè)客戶和服務(wù)對(duì)象之間的通訊可以用下面的形式表示:
1. 在運(yùn)行時(shí)刻,客戶端產(chǎn)生一個(gè)Proxy對(duì)象
2. 客戶端調(diào)用Proxy中的一個(gè)方法
3. Proxy把調(diào)用轉(zhuǎn)換成HTTP和XML形式,并通過(guò)Internet發(fā)送到服務(wù)器端
4. Proxy通過(guò)HTTP協(xié)議得到以XML形式表現(xiàn)的結(jié)果,并轉(zhuǎn)化成相應(yīng)的結(jié)果值返回給客戶
三、Web服務(wù)的編寫(xiě)
這里我們可以寫(xiě)一個(gè)最簡(jiǎn)單的Web服務(wù)來(lái)說(shuō)明這種新技術(shù)的使用,該Web服務(wù)以字符串的形式提供當(dāng)前的服務(wù)器的時(shí)間(可以精確也可以不精確到秒)。程序是以標(biāo)準(zhǔn)的標(biāo)記符"<%@...%>"開(kāi)始的,在該標(biāo)記符內(nèi),WebService告訴ASP.NET該頁(yè)的代碼是作為一個(gè)Web服務(wù)出現(xiàn)的。Language告訴ASP編譯這個(gè)頁(yè)所使用的語(yǔ)言是VB,然后ASP.NET就會(huì)使用Visual Basic.NET來(lái)進(jìn)行代碼的編譯。CLASS屬性告訴ASP.NET當(dāng)前類(lèi)對(duì)象的名稱(chēng)為T(mén)imeService。
具體的代碼如下:
<%@ WebService Language="VB" Class="TimeService"%>
' 引入名字空間' 需要Web Service
Imports System
Imports
System.Web.Services
' 建立一個(gè)新的類(lèi),該類(lèi)必須繼承系統(tǒng)提供的基類(lèi)WebService
Public
Class TimeService : Inherits WebService
'在類(lèi)中建立我們所需要的函數(shù),并標(biāo)記為WebMethods
Public Function <WebMethod()> GetTime (ShowSeconds as Boolean) As
String
' 完成該函數(shù)的功能:發(fā)現(xiàn)當(dāng)前的時(shí)間,格式化,并以字符串形式返回
Dim dt as DateTime
If (ShowSeconds = TRUE) Then
GetTime =
dt.Now.ToLongTimeString
Else
GetTime =
dt.Now.ToShortTimeString
Endif
End Function
End
Class
為了允許開(kāi)發(fā)人員使用Web服務(wù)來(lái)開(kāi)發(fā)客戶端應(yīng)用,需要在設(shè)計(jì)和開(kāi)發(fā)的時(shí)候給他們提供一定的信息。比如,一個(gè)Web服務(wù)的客戶端需要知道Web服務(wù)所暴露的方法和相關(guān)的參數(shù)以及所支持的協(xié)議,這個(gè)和一個(gè)標(biāo)準(zhǔn)的COM所攜帶的類(lèi)型庫(kù)的概念很類(lèi)似。但是類(lèi)型庫(kù)是COM所專(zhuān)用的,而我們所提供的方法應(yīng)該是和具體的體系結(jié)構(gòu)無(wú)關(guān)的,所以需要編寫(xiě)一個(gè)通用的服務(wù)方法的描述。ASP.NET提供了一個(gè)可描述的服務(wù),當(dāng)編譯一個(gè)WEB服務(wù)的時(shí)候,ASP.NET提供了一個(gè)文件列表用來(lái)說(shuō)明服務(wù)所支持的協(xié)議,它所提供的方法和參數(shù)等等。這個(gè)文件是 XML形式編碼并使用稱(chēng)為SDL(Service Descriptor Language)的語(yǔ)言進(jìn)行描述的??梢酝ㄟ^(guò)http://WebServer/ specifiedDirectory /TimeService.asmx?SDL這樣的形式來(lái)得到SDL語(yǔ)言。
當(dāng)我們用VB或者VC來(lái)編寫(xiě)COM組件的時(shí)候,我們一般需要編寫(xiě)一個(gè)類(lèi)型庫(kù)來(lái)描述該COM組件所能提供的功能,而對(duì)ASP.NET來(lái)說(shuō),它能夠自動(dòng)的生成一個(gè)SDL文件,也可以先編寫(xiě)一個(gè)SDL文件,然后通過(guò)系統(tǒng)工具生成一個(gè)服務(wù)的模板文件。
一個(gè)典型的SDL文件具體內(nèi)容如下:
<!-- 標(biāo)準(zhǔn)的XML頭,描述版本信息和其他相關(guān)信息-->
<?xml
version="1.0"?>
<!-- 元素serviceDescription是文件的根節(jié)點(diǎn),里面的內(nèi)容是對(duì)Web服務(wù)的描述
-->
<!-- 值TimeService表示服務(wù)的名稱(chēng) -->
<serviceDescription
name="TimeService">
<!--
元素serviceDescription包括兩個(gè)子元素,一個(gè)是協(xié)議描述,另外一個(gè)是文檔的schema描述
-->
<!-協(xié)議描述用來(lái)告訴客戶端開(kāi)發(fā)人員我這個(gè)Web服務(wù)所支持的協(xié)議,并告訴他請(qǐng)求和響應(yīng)數(shù)據(jù)的編碼格式
-->
<!-這里我們描述了HTTP GET的操作,一般有三種方法HTTP GET,HTTP POST和SOAP三種方法
-->
<httpget>
<service>
<requestResponse name="GetTime"
href="http://WebServer/specifiedDirectory/TimeService.asmx/GetTime">
<request>
<param
name="ShowSeconds"/>
</request>
<response>
<mimeXml
ref="s1:string"/>
</response>
</requestResponse>
</service>
</httpget>
<!- 這里可以對(duì)其他的協(xié)議進(jìn)行描述,比如httpget 和 soap ->
<!-
schema表示對(duì)服務(wù)的抽象定義,它和采用什么協(xié)議和它進(jìn)行通訊無(wú)關(guān) ->
<!- 它實(shí)際上包含了對(duì)服務(wù)包含的函數(shù)的名稱(chēng),參數(shù)和返回值的表示
->
<schema>
<element name="GetTime">
<complexType>
<element name="ShowSeconds" type="boolean"/>
</complexType>
</element>
<element
name="GetTimeResult">
<complexType>
<element name="result"
type="string" nullable="true"/>
</complexType>
</element>
</schema>
</serviceDescription>
四、Web服務(wù)的客戶端的編寫(xiě)
現(xiàn)在讓我們來(lái)看一下如何編寫(xiě)客戶端的代碼。我們知道ASP.NET實(shí)際上是在偵聽(tīng)三種類(lèi)型的數(shù)據(jù)包,它們包括HTTP GET,HTTP POST和SOAP。
1.采用HTTP GET的方法:
其基本格式如下:
http://webserver/specifiedDirectory/timeservice.asmx/GetTime?ShowSeconds=TRUE
2.采用HTTP POST的方法:
實(shí)際上就是通過(guò)HTML的FORM格式來(lái)發(fā)送請(qǐng)求,其主要的代碼如下
<form METHOD="POST" ACTION=" http://webserver/specifiedDirectory/timeservice.asmx/GetTime">
<p>是否顯示秒?</p>
<blockquote>
<p> <input
TYPE="RADIO" NAME="ShowSeconds" VALUE="True" CHECKED>
True
<input TYPE="RADIO" NAME="ShowSeconds"
VALUE="False">False<br>
</p> </blockquote>
<input TYPE="SUBMIT"
VALUE="Submit Form">
<input TYPE="RESET" VALUE="Reset
Form">
</form>
3.采用SOAP的方法:
服務(wù)器接受通過(guò)HTTP POST請(qǐng)求發(fā)送的數(shù)據(jù)包,數(shù)據(jù)包以一個(gè)SOAP包的格式保存。注意這里的SOAP包實(shí)際上是一個(gè)XML文檔,SOAP包中包含了函數(shù)的名稱(chēng)和相關(guān)的參數(shù),當(dāng)SOAP包達(dá)到服務(wù)器的時(shí)候,APS.NET可以識(shí)別這個(gè)SOAP包,然后提取包中所包含的方法和相應(yīng)的參數(shù)并創(chuàng)建這個(gè)對(duì)象,然后執(zhí)行對(duì)該方法的調(diào)用。并把結(jié)果以XML文檔的形式返回到客戶端。這里的關(guān)鍵是合成一個(gè)有效的SOAP包,并對(duì)返回的XML文檔進(jìn)行有效的信息提取。
這里我們可以用如下的VB代碼來(lái)實(shí)現(xiàn)基于SOAP的客戶端。
Private Const QuoteTemplate =
"<?xml version=""1.0""?>
<Envelope xmlns = ""http://schemas.xmlsoap.org/soap/envelope/"" >
<Body>
<GetTime xmlns:xsi=""http://www.w3.org/1999/XMLSchema-instance""
xmlns=""http://tempuri.org/main.xsd"">
<ShowSeconds>true</ShowSeconds>
</GetTime>
</Body>
</Envelope>"
Private Sub btnGetTime_Click()
' 建立DOM對(duì)象
Dim parser As New DOMDocument
'
裝載XML文檔模板
parser.loadXML (QuoteTemplate)
' 設(shè)置參數(shù)ShowSeconds的值
If (Check1.Value = 0) Then
parser.selectSingleNode("/Envelope/Body/GetTime/ShowSeconds").Text =
"false"
Else
parser.selectSingleNode("/Envelope/Body/GetTime/ShowSeconds").Text =
"true"
End If
' 把XML文檔的內(nèi)容放到EDIT控件txtSend中
txtSent.Text = parser.xml
' 使用Microsoft Internet transfer 控件執(zhí)行HTPP POST操作
Inet1.Execute
txtURL.Text, "POST", parser.xml, "Content-Type: text/xml" + vbCr + vbLf
+"SOAPAction: http://tempuri.org/GetTime"
End
Sub
' 控件Inetl1的消息觸發(fā)處理
Private Sub Inet1_StateChanged(ByVal State As Integer)
If (State = 12) Then
' 讀取從服務(wù)器端返回的數(shù)據(jù)
Dim bar As String
bar =
Inet1.GetChunk(4096)
' 把服務(wù)器端返回的數(shù)據(jù)存放到EDIT控件txtReceived中
txtReceived.Text = bar
' 把返回的字符串存放到XML文檔中
Dim
DocIn As New DOMDocument
DocIn.loadXML (bar)
'
利用DOM模型得到元素price的值
Dim Price As IXMLDOMNode
Set Price =
DocIn.selectSingleNode("SOAP:Envelope/SOAP:Body/GetStockQuoteResponse/price")
If (Price Is Nothing) Then
txtPrice = "(error)"
Else
txtPrice = Price.Text
End If
End
If
End Sub
4.通過(guò)智能的SOAP代理進(jìn)行操作
這種方法需要使用Visual Studio.NET開(kāi)發(fā)工具,程序通過(guò)SDL文件讀取對(duì)Web服務(wù)的描述并產(chǎn)生一個(gè)Proxy(注意這個(gè)Proxy可以使用一定的工具自動(dòng)產(chǎn)生),該P(yáng)roxy繼承了基類(lèi)Web.Services.Protocols.SoapClientProtocol。Proxy類(lèi)包含了一個(gè)屬性稱(chēng)為Path,這個(gè)屬性指出服務(wù)器的URL地址,它包含一個(gè)從SDL文件中得到的缺省的值,客戶端通過(guò)方法Invoke來(lái)激活Proxy中的方法(比如A),該方法(A)然后創(chuàng)建一個(gè)SOAP包,包中包含了方法的名稱(chēng)和參數(shù),然后通過(guò)HTTP協(xié)議把它發(fā)送給服務(wù)器。當(dāng)SOAP響應(yīng)包從服務(wù)器中返回的時(shí)候,基類(lèi)就對(duì)返回的值進(jìn)行解析并把它返回給Proxy,再由Proxy返回給客戶。然后你可以使用具體的語(yǔ)言來(lái)操作這個(gè)Proxy,當(dāng)前支持的語(yǔ)言有Visual Baisc.NET,C#和JavaScript,但不支持C++。
下面是用VB.NET編寫(xiě)的和Proxy進(jìn)行交互的代碼:
Public Class Form1 Inherits System.WinForms.Form
'
當(dāng)點(diǎn)擊按紐GetTimeSynch時(shí)的處理(同步處理)
Protected Sub btnGetTimeSynch_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
'
產(chǎn)生一個(gè)新的Proxy類(lèi)的對(duì)象實(shí)例
Dim ThisTimeServiceProxy As New TimeService()
' 設(shè)置由用戶指定的屬性Path的值
ThisTimeServiceProxy.Path =
TextBox2.Text
' 實(shí)際調(diào)用方法,并把結(jié)果返回到文本框中
'
CheckBox1的值表示方法GetTime的參數(shù)值
TextBox1.Text =
ThisTimeServiceProxy.GetTime(CheckBox1.Checked)
End Sub
Dim AsyncTimeServiceProxy As TimeService
Dim AsyncResult
As IAsyncResult
' 當(dāng)點(diǎn)擊按紐GetTimeASynch時(shí)的處理(異步處理)
Protected Sub
btn_BeginGetTimeAsync_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
AsyncTimeServiceProxy = New TimeService
AsyncResult =
AsyncTimeServiceProxy.BeginGetTime(CheckBox1.Checked, Nothing,
Nothing)
End Sub
' 檢查當(dāng)前的操作是否結(jié)束
Protected Sub
btnPollForComplete_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
If (AsyncResult.IsCompleted) Then
MsgBox("Complete")
Else
MsgBox("Not
Complete")
End If
End Sub
' 得到采用異步方法調(diào)用所得到的結(jié)果
Protected Sub btnEndGetTimeAsync_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs)
TextBox1.text =
AsyncTimeServiceProxy.EndGetTime(AsyncResult)
AsyncTimeServiceProxy =
Nothing
End Sub
End Class
我們知道,基于Internet的計(jì)算環(huán)境要比基于桌面的環(huán)境要復(fù)雜的多,而且交互時(shí)間也要長(zhǎng)的多,比如對(duì)一個(gè)最簡(jiǎn)單的Web服務(wù)的調(diào)用可能就要花費(fèi)5到10秒甚至更長(zhǎng)的時(shí)間,而在這個(gè)時(shí)候你不能指望用戶愿意傻乎乎的一直等在那里。換句話說(shuō),因?yàn)樽烂娼换r(shí)間非常短,我們可以采用同步調(diào)用的方法來(lái)調(diào)用組件的一個(gè)方法,但是在基于Internet計(jì)算的時(shí)候,我們必須采用異步調(diào)用的方法。
上面的VB.NET代碼中也演示了異步調(diào)用的方法,實(shí)際上Proxy本身就包含了一個(gè)方法稱(chēng)為Beginmethodname,就我們具體例子而言就是BeginGetTime,調(diào)用這個(gè)方法以后,程序會(huì)立刻返回,然后可以做其他想做的事情,等你需要看結(jié)果的時(shí)候,你需要調(diào)用方法Endmethodname,然后得到結(jié)果。當(dāng)然如果在結(jié)果沒(méi)有返回前你調(diào)用方法Endmethodname的話,程序就會(huì)阻塞直到從服務(wù)器中得到結(jié)果。為了防止整個(gè)界面處于阻塞狀態(tài),實(shí)際實(shí)現(xiàn)的時(shí)候,你可以在一個(gè)工作者線程中調(diào)用Endmethodname方法。
五、結(jié)論
實(shí)際上,幾乎所有的編程人員都希望編寫(xiě)能在Internet上進(jìn)行交互的程序,而不管他們的運(yùn)行平臺(tái)到底是什么。而通過(guò)使用HTTP和XML技術(shù),我們基本上就能夠達(dá)到這個(gè)功能??蛻舳酥灰褦?shù)據(jù)以XML的形式進(jìn)行打包,以HTTP形式進(jìn)行傳送,服務(wù)器端就能夠進(jìn)行處理,而在服務(wù)器端,它通過(guò)創(chuàng)建一個(gè)SDL文件來(lái)描述服務(wù)對(duì)象所能夠提供的方法和參數(shù),這樣客戶端就可以正確的對(duì)服務(wù)對(duì)象進(jìn)行調(diào)用。同時(shí),一個(gè)Proxy的生成器提供了一個(gè)到達(dá)Web服務(wù)的函數(shù)集,使客戶端程序編寫(xiě)的工作變的更加簡(jiǎn)單。
需要說(shuō)明的是,微軟即將推出的Visual Studio.NET這套開(kāi)發(fā)工具提供了開(kāi)發(fā)Web服務(wù)的集成環(huán)境,而這種Web服務(wù)的體系結(jié)構(gòu)同時(shí)也對(duì)Web應(yīng)用提供了安全級(jí)別,這些工具使開(kāi)發(fā)人員能夠快速有效的構(gòu)建基于Internet的應(yīng)用系統(tǒng)。
- 1重慶OA信息化
- 2成都OA信息化
- 3貴陽(yáng)OA信息化
- 4西安OA信息化
- 5武漢OA信息化
- 6北京OA信息化
- 7廣州OA信息化
- 8石家莊OA信息化
- 9天津OA信息化
- 10沈陽(yáng)OA信息化
- 11長(zhǎng)春OA信息化
- 12福州OA信息化
- 1企業(yè)上海OA信息化創(chuàng)新探析
- 2軟件服務(wù)時(shí)代的來(lái)臨
- 3上海環(huán)境集團(tuán)辦公OA信息系統(tǒng)
- 4泛普軟件OA小助手可以實(shí)現(xiàn)和網(wǎng)頁(yè)版OA的無(wú)縫集成
- 5OA辦公系統(tǒng)有其特殊性,又具有管理軟件的共性
- 6知識(shí)分析師和知識(shí)主管的區(qū)別
- 7知識(shí)時(shí)代的企業(yè)——?jiǎng)?chuàng)建21世紀(jì)的組織
- 8上海OA信息化與創(chuàng)新
- 9Sun 擁有Java, 但是它的Web Service 在哪里?
- 10經(jīng)營(yíng)知識(shí)
- 11知識(shí)社區(qū)主要表現(xiàn)形式
- 12上海電力安裝第一工程公司OA辦公自動(dòng)化系統(tǒng)-登錄
- 13Web服務(wù)發(fā)展中的一些問(wèn)題
- 14上海OA信息化“人-過(guò)程-技術(shù)”三個(gè)層面的關(guān)鍵指標(biāo)
- 15會(huì)議跟蹤、公告欄應(yīng)用辦公自動(dòng)化軟件OA系統(tǒng)
- 16企業(yè)論壇、短信提醒、設(shè)置等模塊組成OA辦公系統(tǒng)
- 17以移動(dòng)OA辦公系統(tǒng)來(lái)改變用戶的移動(dòng)應(yīng)用產(chǎn)品矩陣
- 18上海OA信息化實(shí)施中的PDCA循環(huán)
- 19上海OA市場(chǎng)過(guò)去、未來(lái)
- 20使用Visual Basic或C#創(chuàng)建Web Service
- 21泛普OA成功實(shí)施的保障
- 22競(jìng)爭(zhēng)情報(bào)和上海OA信息化的融合
- 23如何審核知識(shí)?
- 24建筑設(shè)計(jì)企業(yè)的上海OA信息化
- 25微軟IBM拋開(kāi)宿怨聯(lián)手打造Web新標(biāo)準(zhǔn)
- 26泛普OA軟件給大眾的印象正是實(shí)用、易用、開(kāi)放
- 27上海市奉賢中等專(zhuān)業(yè)學(xué)校辦公OA系統(tǒng)
- 28隱性知識(shí)轉(zhuǎn)化是知識(shí)創(chuàng)新的基礎(chǔ)
- 29OA協(xié)同系統(tǒng)的啟用與完善,將加快實(shí)現(xiàn)特檢院辦公先進(jìn)性
- 30有生命力的上海OA信息化
成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓