監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

微軟基于Web計(jì)算的框架結(jié)構(gòu)分析

申請免費(fèi)試用、咨詢電話: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ì)算模型不再是簡單的依賴于瀏覽器作為客戶端。

首先,我們來簡單看一下計(jì)算模型的發(fā)展歷史,一開始,由于個人計(jì)算機(jī)還尚未普及,而且計(jì)算機(jī)價格都比較昂貴,我們一般采用主機(jī)模式來進(jìn)行計(jì)算,也就是說客戶實(shí)際上是通過終端和大型主機(jī)進(jìn)行連接,主機(jī)分配一定的CPU時間和磁盤空間給用戶,所有用戶的計(jì)算實(shí)際上都是在主機(jī)上完成的。這樣對主機(jī)的要求非常高,要求主機(jī)上的操作系統(tǒng)必須是高度可靠、安全的。在這個時候,流行的是IBM的大型機(jī)的操作系統(tǒng),這里注意的是,即使到現(xiàn)在,很多銀行依然通過這個模式進(jìn)行運(yùn)做,因?yàn)槿菀走M(jìn)行集中管理和維護(hù),客戶端實(shí)際上僅僅是一個終端的功能,從某一個角度講就是主機(jī)屏幕的延伸。

隨著分布式概念的提出和微機(jī)功能的增強(qiáng),軟件業(yè)又提出了客戶/服務(wù)器的計(jì)算模型,把一些非關(guān)鍵的任務(wù)(比如圖形界面的顯示,數(shù)據(jù)的顯示格式確定,數(shù)據(jù)的處理等等)放到客戶端進(jìn)行執(zhí)行,這樣相對就減輕了對服務(wù)器的負(fù)擔(dān)。但是這種模式一般是基于局域網(wǎng)范圍內(nèi)進(jìn)行的(比如在九十年代非常流行的一些基于數(shù)據(jù)庫的信息系統(tǒng)就是根據(jù)這種模式構(gòu)建的)。

隨著Internet的發(fā)展和企業(yè)之間電子交互的需求的出現(xiàn),出現(xiàn)了基于數(shù)據(jù)庫/Web服務(wù)器/瀏覽器這樣的計(jì)算模型,這種模型實(shí)際上是基于全球網(wǎng)絡(luò)范圍內(nèi)進(jìn)行的,客戶端統(tǒng)一的以瀏覽器的形式表現(xiàn)給用戶,用戶通過HTTP協(xié)議把任務(wù)提交給Web服務(wù)器,Web服務(wù)器通過和數(shù)據(jù)庫和應(yīng)用服務(wù)器的交互把結(jié)果通過HTTP協(xié)議傳遞給客戶端,然后客戶端再通過瀏覽器顯示結(jié)果。在這種模式下的關(guān)鍵是數(shù)據(jù)傳遞的安全性和事務(wù)性這兩個問題,因?yàn)镠TTP本質(zhì)是是一個無狀態(tài)的連接,所以事務(wù)處理就變得非常重要,同時因?yàn)檎麄€業(yè)務(wù)是基于全球網(wǎng)絡(luò)體系結(jié)構(gòu)的,所以安全性也變成一個值得關(guān)注的問題。

隨著Internet上計(jì)算任務(wù)的復(fù)雜化和業(yè)務(wù)的多樣化,自然而然就產(chǎn)生了以Web為中心進(jìn)行計(jì)算的需求。從本質(zhì)上說,對Internet應(yīng)用的復(fù)雜化使我們當(dāng)前的操作系統(tǒng)都顯得力不從心,因?yàn)槲覀儺?dāng)前的操作系統(tǒng)一般都是基于單機(jī)或者局域網(wǎng)系統(tǒng)的,而如何把操作系統(tǒng)擴(kuò)展到整個Internet計(jì)算這個范疇內(nèi),就成了所有操作系統(tǒng)軟件生產(chǎn)廠商所必須考慮的問題。

基于Web的軟件系統(tǒng)的例子有很多,比如Napster,它允許在用戶之間進(jìn)行磁盤內(nèi)容的共享,從某一種角度講,它的基本概念是要建立一個基于Web的文件系統(tǒng),這個文件系統(tǒng)包含了所有參與者本身的文件系統(tǒng)。這樣參與者之間就可以進(jìn)行文件的共享,通過輸入一定的查詢條件,我們就可以在其他的用戶的存儲設(shè)備上找到相應(yīng)的文件并進(jìn)行下載(當(dāng)然這種概念在局域網(wǎng)中早就存在,現(xiàn)在Napster把這個概念擴(kuò)展到了整個Internet領(lǐng)域而已)。

二、Web服務(wù)體系結(jié)構(gòu)分析

這種基于Internet類型應(yīng)用的出現(xiàn)使我們需要一個嶄新的框架結(jié)構(gòu)來進(jìn)行程序的設(shè)計(jì),我們需要一個快速和方便的方法進(jìn)行代碼的編寫并且能夠和Internet上其他的程序進(jìn)行交互。當(dāng)然在計(jì)算機(jī)之間進(jìn)行數(shù)據(jù)和信息交互這個概念并不是很新,比如通過RPC,DCOM和CORBA等都可以實(shí)現(xiàn)不同計(jì)算機(jī)上的進(jìn)程之間的交互。但是它們都有一個致命的缺點(diǎn):它們需要進(jìn)行交互的機(jī)器具有相似的系統(tǒng),比如MSMQ只能和MSMQ進(jìn)行對話,DCOM客戶端只能和DCOM服務(wù)器端進(jìn)行交互。

而我們真正需要的是一個通用的開發(fā)框架,也就是說不管系統(tǒng)的那一端是什么東西,我們這一端都可以和它進(jìn)行信息的交互。它的本質(zhì)意義就是說兩端的操作系統(tǒng)不僅可以是異構(gòu)的(比如一端可以是Windows,另一端可以是UNIX),而且實(shí)現(xiàn)的語言也可以是異構(gòu)的(一端可以用C++實(shí)現(xiàn),另一端可以用VB實(shí)現(xiàn))。

如果大家還記得在DCOM進(jìn)行交互時的數(shù)據(jù)列集(Marshal)這個概念的話,那么就可以理解基于Internet異構(gòu)系統(tǒng)通訊的關(guān)鍵點(diǎn)是什么了。一個就是通訊的標(biāo)準(zhǔn),兩個進(jìn)程需要采用標(biāo)準(zhǔn)的協(xié)議進(jìn)行通訊,另外一個就是數(shù)據(jù)的打包,數(shù)據(jù)應(yīng)該采用一致的形式進(jìn)行打包和解包。當(dāng)前基于Internet最流行的傳輸協(xié)議就是HTTP,所有的Web瀏覽器都通過這個協(xié)議和Web服務(wù)器進(jìn)行通訊并得到相關(guān)的網(wǎng)頁。而數(shù)據(jù)的打包也需要采用一定的標(biāo)準(zhǔn),當(dāng)前出現(xiàn)的跨平臺的信息編碼的標(biāo)準(zhǔn)就是XML。因?yàn)镠TTP和XML都是工業(yè)的標(biāo)準(zhǔn),并不和任何平臺,廠商掛鉤,所以基于這兩種標(biāo)準(zhǔn)構(gòu)建的系統(tǒng)無疑在任何環(huán)境是都是有生命力的。

為了創(chuàng)建一個Web服務(wù),我們所需要做的工作就是編寫一個.Net服務(wù)對象,使它被異地進(jìn)程的調(diào)用就象能夠被本地的客戶端直接調(diào)用一樣。實(shí)際上是通過給它標(biāo)記一定的屬性來實(shí)現(xiàn)的,使它能夠被Web客戶端所使用。通過ASP.NET,這個.Net服務(wù)對象就能夠接受來自客戶端的請求(通過HTTP協(xié)議傳輸?shù)模?。也就是說.Net服務(wù)對象能夠和任何使用HTTP和XML標(biāo)準(zhǔn)的進(jìn)程進(jìn)行通訊,你也不需要考慮Web通訊的體系結(jié)構(gòu),操作系統(tǒng)已經(jīng)幫你搞定了這一切。

從服務(wù)對象的角度來講,一個客戶和服務(wù)對象之間的通訊可以用下面的形式表示:

1. 從客戶端的HTTP請求到達(dá),其中參數(shù)可能包含在URL中,也可能包含在一個單獨(dú)的XML文件中
  
2. ASP.NET根據(jù).asmx文件的指定創(chuàng)建對象

3. ASP.NET調(diào)用對象的某一個特定的方法

4. 對象把結(jié)果返回給ASP.NET

在客戶端,.NET提供了Proxy類用來快速方便的和服務(wù)器提供的Web服務(wù)進(jìn)行交互,通過開發(fā)工具得到Web服務(wù)的描述,然后就可以產(chǎn)生一個包含一些功能函數(shù)的Proxy類,注意,在這里我們可以使用任何類型的語言來開發(fā)客戶端,當(dāng)客戶端調(diào)用其中的某一個函數(shù)的時候,Proxy就會產(chǎn)生一個HTTP請求并把它發(fā)送給服務(wù)器,當(dāng)服務(wù)器響應(yīng)返回的時候,Proxy能夠?qū)Y(jié)果進(jìn)行解析并返回給調(diào)用該函數(shù)的客戶端。這樣,就保證了客戶端能夠通過HTTP和XML無縫的和Web服務(wù)器進(jìn)行信息的交互。

從客戶端的角度來講,一個客戶和服務(wù)對象之間的通訊可以用下面的形式表示:

1. 在運(yùn)行時刻,客戶端產(chǎn)生一個Proxy對象

2. 客戶端調(diào)用Proxy中的一個方法

3. Proxy把調(diào)用轉(zhuǎn)換成HTTP和XML形式,并通過Internet發(fā)送到服務(wù)器端

4. Proxy通過HTTP協(xié)議得到以XML形式表現(xiàn)的結(jié)果,并轉(zhuǎn)化成相應(yīng)的結(jié)果值返回給客戶

三、Web服務(wù)的編寫

這里我們可以寫一個最簡單的Web服務(wù)來說明這種新技術(shù)的使用,該Web服務(wù)以字符串的形式提供當(dāng)前的服務(wù)器的時間(可以精確也可以不精確到秒)。程序是以標(biāo)準(zhǔn)的標(biāo)記符"<%@...%>"開始的,在該標(biāo)記符內(nèi),WebService告訴ASP.NET該頁的代碼是作為一個Web服務(wù)出現(xiàn)的。Language告訴ASP編譯這個頁所使用的語言是VB,然后ASP.NET就會使用Visual Basic.NET來進(jìn)行代碼的編譯。CLASS屬性告訴ASP.NET當(dāng)前類對象的名稱為TimeService。

具體的代碼如下:

<%@ WebService Language="VB" Class="TimeService"%>

' 引入名字空間' 需要Web Service
 
Imports System
 
Imports System.Web.Services
 
' 建立一個新的類,該類必須繼承系統(tǒng)提供的基類WebService
 
Public Class TimeService : Inherits WebService
  
'在類中建立我們所需要的函數(shù),并標(biāo)記為WebMethods
  
Public Function <WebMethod()> GetTime (ShowSeconds as Boolean) As String
  
' 完成該函數(shù)的功能:發(fā)現(xiàn)當(dāng)前的時間,格式化,并以字符串形式返回
   
Dim dt as DateTime
   
If (ShowSeconds = TRUE) Then
    
GetTime = dt.Now.ToLongTimeString
   
Else
    
GetTime = dt.Now.ToShortTimeString
   
Endif
  
End Function

End Class

為了允許開發(fā)人員使用Web服務(wù)來開發(fā)客戶端應(yīng)用,需要在設(shè)計(jì)和開發(fā)的時候給他們提供一定的信息。比如,一個Web服務(wù)的客戶端需要知道Web服務(wù)所暴露的方法和相關(guān)的參數(shù)以及所支持的協(xié)議,這個和一個標(biāo)準(zhǔn)的COM所攜帶的類型庫的概念很類似。但是類型庫是COM所專用的,而我們所提供的方法應(yīng)該是和具體的體系結(jié)構(gòu)無關(guān)的,所以需要編寫一個通用的服務(wù)方法的描述。ASP.NET提供了一個可描述的服務(wù),當(dāng)編譯一個WEB服務(wù)的時候,ASP.NET提供了一個文件列表用來說明服務(wù)所支持的協(xié)議,它所提供的方法和參數(shù)等等。這個文件是 XML形式編碼并使用稱為SDL(Service Descriptor Language)的語言進(jìn)行描述的??梢酝ㄟ^http://WebServer/ specifiedDirectory /TimeService.asmx?SDL這樣的形式來得到SDL語言。

當(dāng)我們用VB或者VC來編寫COM組件的時候,我們一般需要編寫一個類型庫來描述該COM組件所能提供的功能,而對ASP.NET來說,它能夠自動的生成一個SDL文件,也可以先編寫一個SDL文件,然后通過系統(tǒng)工具生成一個服務(wù)的模板文件。

一個典型的SDL文件具體內(nèi)容如下:

<!-- 標(biāo)準(zhǔn)的XML頭,描述版本信息和其他相關(guān)信息-->

<?xml version="1.0"?>

<!-- 元素serviceDescription是文件的根節(jié)點(diǎn),里面的內(nèi)容是對Web服務(wù)的描述 -->

<!-- 值TimeService表示服務(wù)的名稱 -->

<serviceDescription name="TimeService">

<!-- 元素serviceDescription包括兩個子元素,一個是協(xié)議描述,另外一個是文檔的schema描述 -->

<!-協(xié)議描述用來告訴客戶端開發(fā)人員我這個Web服務(wù)所支持的協(xié)議,并告訴他請求和響應(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>

<!- 這里可以對其他的協(xié)議進(jìn)行描述,比如httpget 和 soap ->

<!- schema表示對服務(wù)的抽象定義,它和采用什么協(xié)議和它進(jìn)行通訊無關(guān) ->

<!- 它實(shí)際上包含了對服務(wù)包含的函數(shù)的名稱,參數(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àn)在讓我們來看一下如何編寫客戶端的代碼。我們知道ASP.NET實(shí)際上是在偵聽三種類型的數(shù)據(jù)包,它們包括HTTP GET,HTTP POST和SOAP。

1.采用HTTP GET的方法:

其基本格式如下:

http://webserver/specifiedDirectory/timeservice.asmx/GetTime?ShowSeconds=TRUE

2.采用HTTP POST的方法:

實(shí)際上就是通過HTML的FORM格式來發(fā)送請求,其主要的代碼如下

<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ù)器接受通過HTTP POST請求發(fā)送的數(shù)據(jù)包,數(shù)據(jù)包以一個SOAP包的格式保存。注意這里的SOAP包實(shí)際上是一個XML文檔,SOAP包中包含了函數(shù)的名稱和相關(guān)的參數(shù),當(dāng)SOAP包達(dá)到服務(wù)器的時候,APS.NET可以識別這個SOAP包,然后提取包中所包含的方法和相應(yīng)的參數(shù)并創(chuàng)建這個對象,然后執(zhí)行對該方法的調(diào)用。并把結(jié)果以XML文檔的形式返回到客戶端。這里的關(guān)鍵是合成一個有效的SOAP包,并對返回的XML文檔進(jìn)行有效的信息提取。

這里我們可以用如下的VB代碼來實(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對象
 
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.通過智能的SOAP代理進(jìn)行操作

這種方法需要使用Visual Studio.NET開發(fā)工具,程序通過SDL文件讀取對Web服務(wù)的描述并產(chǎn)生一個Proxy(注意這個Proxy可以使用一定的工具自動產(chǎn)生),該P(yáng)roxy繼承了基類Web.Services.Protocols.SoapClientProtocol。Proxy類包含了一個屬性稱為Path,這個屬性指出服務(wù)器的URL地址,它包含一個從SDL文件中得到的缺省的值,客戶端通過方法Invoke來激活Proxy中的方法(比如A),該方法(A)然后創(chuàng)建一個SOAP包,包中包含了方法的名稱和參數(shù),然后通過HTTP協(xié)議把它發(fā)送給服務(wù)器。當(dāng)SOAP響應(yīng)包從服務(wù)器中返回的時候,基類就對返回的值進(jìn)行解析并把它返回給Proxy,再由Proxy返回給客戶。然后你可以使用具體的語言來操作這個Proxy,當(dāng)前支持的語言有Visual Baisc.NET,C#和JavaScript,但不支持C++。

下面是用VB.NET編寫的和Proxy進(jìn)行交互的代碼:

Public Class Form1 Inherits System.WinForms.Form
 
' 當(dāng)點(diǎn)擊按紐GetTimeSynch時的處理(同步處理)
 
Protected Sub btnGetTimeSynch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
 
' 產(chǎn)生一個新的Proxy類的對象實(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時的處理(異步處理)
 
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ù)雜的多,而且交互時間也要長的多,比如對一個最簡單的Web服務(wù)的調(diào)用可能就要花費(fèi)5到10秒甚至更長的時間,而在這個時候你不能指望用戶愿意傻乎乎的一直等在那里。換句話說,因?yàn)樽烂娼换r間非常短,我們可以采用同步調(diào)用的方法來調(diào)用組件的一個方法,但是在基于Internet計(jì)算的時候,我們必須采用異步調(diào)用的方法。

上面的VB.NET代碼中也演示了異步調(diào)用的方法,實(shí)際上Proxy本身就包含了一個方法稱為Beginmethodname,就我們具體例子而言就是BeginGetTime,調(diào)用這個方法以后,程序會立刻返回,然后可以做其他想做的事情,等你需要看結(jié)果的時候,你需要調(diào)用方法Endmethodname,然后得到結(jié)果。當(dāng)然如果在結(jié)果沒有返回前你調(diào)用方法Endmethodname的話,程序就會阻塞直到從服務(wù)器中得到結(jié)果。為了防止整個界面處于阻塞狀態(tài),實(shí)際實(shí)現(xiàn)的時候,你可以在一個工作者線程中調(diào)用Endmethodname方法。

五、結(jié)論

實(shí)際上,幾乎所有的編程人員都希望編寫能在Internet上進(jìn)行交互的程序,而不管他們的運(yùn)行平臺到底是什么。而通過使用HTTP和XML技術(shù),我們基本上就能夠達(dá)到這個功能。客戶端只要把數(shù)據(jù)以XML的形式進(jìn)行打包,以HTTP形式進(jìn)行傳送,服務(wù)器端就能夠進(jìn)行處理,而在服務(wù)器端,它通過創(chuàng)建一個SDL文件來描述服務(wù)對象所能夠提供的方法和參數(shù),這樣客戶端就可以正確的對服務(wù)對象進(jìn)行調(diào)用。同時,一個Proxy的生成器提供了一個到達(dá)Web服務(wù)的函數(shù)集,使客戶端程序編寫的工作變的更加簡單。

需要說明的是,微軟即將推出的Visual Studio.NET這套開發(fā)工具提供了開發(fā)Web服務(wù)的集成環(huán)境,而這種Web服務(wù)的體系結(jié)構(gòu)同時也對Web應(yīng)用提供了安全級別,這些工具使開發(fā)人員能夠快速有效的構(gòu)建基于Internet的應(yīng)用系統(tǒng)。

發(fā)布:2007-03-24 18:00    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
上海OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢