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

當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 重慶OA系統(tǒng) > 重慶OA行業(yè)資訊

.NET中的Web service的開(kāi)發(fā)

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

AMTeam.org

.NET中的Web service的開(kāi)發(fā)

.NET平臺(tái)內(nèi)建了對(duì)Web service的支持,包括Web service的構(gòu)建和使用。 與其它開(kāi)發(fā)平臺(tái)不同,使用.NET平臺(tái),你不需要其他的工具或者SDK就可以完成Web service的開(kāi)發(fā)了。.NET Framework本身就全面支持Web service,包括服務(wù)器端的請(qǐng)求處理器和對(duì)客戶端發(fā)送和接受SOAP消息的支持。本節(jié)將帶你用.NET創(chuàng)建和使用一個(gè)簡(jiǎn)單的Web service。

要在.NET中創(chuàng)建Web service,你只需建立一個(gè).asmx文件。這個(gè)文件中有一個(gè)WebService標(biāo)簽,包含Language和class兩個(gè)屬性,分別用于指定編程語(yǔ)言和Web service中暴露出的類。然后你就可以像平常一樣編寫你的類了。最后,在每個(gè)你想要暴露出的方法前面加一個(gè)System.Web.Services.WebMethodAttribute屬性就可以了。最終代碼類似于下面的程序清單。

'a WebService in VB.NET (calc_vb.asmx)
<%@WebService Language="VB"class="Calc" %>
Imports System.Web.Services
Public Class Calc
<WebMethod()> _
Public Function Add(ByVal a As Double, _
ByVal b As Double) As Double
Return a + b
End Function
End Class


用瀏覽器來(lái)瀏覽這個(gè).asmx文件,你可以得到一張測(cè)試這個(gè)Web service的頁(yè)面。例如,你把calc_vb.asmx 文件放到了Web服務(wù)器的myService目錄下,那么相應(yīng)的URL就是:

http://localhost/myService/calc_vb.asmx

測(cè)試頁(yè)如下圖所示。這一頁(yè)是自動(dòng)生成的。它顯示了Web service 的名字并列出了可以調(diào)用的方法。列表后面有一段文字,意思是你正在使用缺省的命名空間http://tempuri.org/,如果你想要發(fā)布這個(gè)Web service的話,最好換一個(gè)你自己的命名空間,以避免名字上的沖突。本書后面的部分將會(huì)討論Web service 命名空間的問(wèn)題。在第六章中,我還會(huì)介紹怎樣使用.NET的屬性來(lái)指定命名空間和其他一些東西。

 
自動(dòng)生成的Web service測(cè)試頁(yè)

在測(cè)試頁(yè)里點(diǎn)擊Add方法,你會(huì)得到一個(gè)HTML表單,用來(lái)測(cè)試這個(gè)方法(見(jiàn)下圖)。在這個(gè)表單里,Add方法所接受的所有參數(shù)都有一個(gè)相應(yīng)的文本框。填好所有的參數(shù),點(diǎn)擊"Invoke"按鈕,這個(gè)表單就會(huì)被提交到Web服務(wù)器。實(shí)際上,這就是通過(guò)HTTP GET的形式在調(diào)用Web service。得到的結(jié)果是一個(gè)如下的簡(jiǎn)單XML文檔:

<double xmlns="158http://tempuri.org/">158</double>

瀏覽下面這個(gè)URL,可以直接調(diào)用Add方法:

http://localhost/myService/calc_vb.asmx/Add?a=123&b=35

如你所見(jiàn),方法的名字是你所請(qǐng)求的資源(注意,這里是區(qū)分大小寫的),而函數(shù)中的每個(gè)參數(shù)都映射為查詢字符串中的一個(gè)參數(shù)。這種形式對(duì)快速測(cè)試一個(gè)Web service 是非常方便的。不過(guò),因?yàn)檫@種方式使用的是HTTP GET,所以它在數(shù)據(jù)類型和參數(shù)傳遞方向等方面都有一些局限。我們將在第六章中詳細(xì)討論這些局限。

 自動(dòng)生成的Add方法測(cè)試頁(yè)

回到前面的Web service測(cè)試頁(yè),我們還可以看到頁(yè)面的頂部有一個(gè)Service Description鏈接。點(diǎn)擊過(guò)去你就可以得到描述這個(gè)Web service的WSDL文檔,如下圖。在Web service的URL后面加上一個(gè)"WSDL"查詢字符串,你也可以直接瀏覽到這一頁(yè):
http://localhost/myService/calc_vb.asmx?wsdl

 


Calc Web service的WSDL文檔。注意,為了顯示更多內(nèi)容,所有的XML元素都已折疊起來(lái)。

Calc Web service的WSDL文檔。注意,為了顯示更多內(nèi)容,所有的XML元素都已折疊起來(lái)。

要在.NET中調(diào)用一個(gè)Web service ,你需要先運(yùn)行wsdl.exe工具。這個(gè)工具會(huì)從Web service中讀出它的WSDL描述文檔,生成一個(gè)可以調(diào)用這個(gè)Web service的代理類。例如,在命令行中執(zhí)行下面的命令,可以生成Calc Web service的代理類:

wsdl.exe /language:VB http://localhost/myService/calc_vb.asmx?wsdl

程序清單1-2截取自生成的VB代理類源碼。這個(gè)代理類繼承自System.Web.Services.Protocols.SoapHttpClientProtocol類,并且暴露出一個(gè)Add方法,這個(gè)方法接收兩個(gè)double型浮點(diǎn)數(shù),返回一個(gè)double型浮點(diǎn)數(shù)。


程序清單1 2 截取自wsdl.exe 生成的Web service代理類源代碼

Imports System.Web.Services.Protocols
'省略其他代碼
Public Class Calc
Inherits SoapHttpClientProtocol
'省略其他代碼
<System.Diagnostics.DebuggerStepThroughAttribute(),_
SoapDocumentMethodAttribute( _
"http://tempuri.org/Add", _
Use:=System.Web.Services.Description.SoapBindingUse.Literal,_
ParameterStyle:= SoapParameterStyle.Wrapped)>_
Public Function Add(ByVal a As Double, ByValb As Double) As Double
Dim results() As Object = Me.Invoke("Add",_
New Object() {a, b})
Return CType(results(0), Double)
End Function
'省略其他代碼
End Class
此后的工作就非常簡(jiǎn)單了。要調(diào)用CalculatorWeb service,只需實(shí)例化一個(gè)Calc的代理對(duì)象,再調(diào)用它的Add方法:
Dim ws As New Calc()
Dim result As Double = ws.Add(20.5, 10.9)
MessageBox.Show("結(jié)果是:" &result.ToString)

實(shí)際上,代理類中的Add方法僅僅是通過(guò).NET Framework的SoapHttpClientProtocol類來(lái)調(diào)用Web service,然后再把Web service 的返回值返回給調(diào)用者。

當(dāng)然,除了上面的這些演示之外,.NET Web service的創(chuàng)建和調(diào)用還有很多的內(nèi)容。不過(guò),在深入這些細(xì)節(jié)之前,我們需要先理解Webservice里面的幾個(gè)關(guān)鍵技術(shù):XSD、SOAP和WSDL。

發(fā)布:2007-03-25 10:28    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章: