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

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

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

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

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

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

要在.NET中創(chuàng)建Web service,你只需建立一個.asmx文件。這個文件中有一個WebService標(biāo)簽,包含Language和class兩個屬性,分別用于指定編程語言和Web service中暴露出的類。然后你就可以像平常一樣編寫你的類了。最后,在每個你想要暴露出的方法前面加一個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


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

http://localhost/myService/calc_vb.asmx

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

 
自動生成的Web service測試頁

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

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

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

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

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

 自動生成的Add方法測試頁

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

 


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

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

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

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

程序清單1-2截取自生成的VB代理類源碼。這個代理類繼承自System.Web.Services.Protocols.SoapHttpClientProtocol類,并且暴露出一個Add方法,這個方法接收兩個double型浮點數(shù),返回一個double型浮點數(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
此后的工作就非常簡單了。要調(diào)用CalculatorWeb service,只需實例化一個Calc的代理對象,再調(diào)用它的Add方法:
Dim ws As New Calc()
Dim result As Double = ws.Add(20.5, 10.9)
MessageBox.Show("結(jié)果是:" &result.ToString)

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

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

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