.NET中的Web service的開發

來源:互聯網
上載者:User
web .NET平台內建了對Web service的支援,包括Web service的構建和使用。 與其它開發平台不同,使用.NET平台,你不需要其他的工具或者SDK就可以完成Web service的開發了。.NET Framework本身就全面支援Web service,包括伺服器端的要求處理常式和對用戶端發送和接受SOAP訊息的支援。本節將帶你用.NET建立和使用一個簡單的Web service。
要在.NET中建立Web service,你只需建立一個.asmx檔案。這個檔案中有一個WebService標籤,包含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伺服器的myService目錄下,那麼相應的URL就是:
http://localhost/myService/calc_vb.asmx
測試頁如下圖所示。這一頁是自動產生的。它顯示了Web service 的名字並列出了可以調用的方法。列表後面有一段文字,意思是你正在使用預設的命名空間http://tempuri.org/,如果你想要發布這個Web service的話,最好換一個你自己的命名空間,以避免名字上的衝突。本書後面的部分將會討論Web service 命名空間的問題。在第六章中,我還會介紹怎樣使用.NET的屬性來指定命名空間和其他一些東西。



自動產生的Web service測試頁

在測試頁裡點擊Add方法,你會得到一個HTML表單,用來測試這個方法(見下圖)。在這個表單裡,Add方法所接受的所有參數都有一個相應的文字框。填好所有的參數,點擊"Invoke"按鈕,這個表單就會被提交到Web伺服器。實際上,這就是通過HTTP GET的形式在調用Web service。得到的結果是一個如下的簡單XML文檔:
<double xmlns="http://tempuri.org/">158</double>
瀏覽下面這個URL,可以直接調用Add方法:
http://localhost/myService/calc_vb.asmx/Add?a=123&b=35
如你所見,方法的名字是你所請求的資源(注意,這裡是區分大小寫),而函數中的每個參數都映射為查詢字串中的一個參數。這種形式對快速測試一個Web service 是非常方便的。不過,因為這種方式使用的是HTTP GET,所以它在資料類型和參數傳遞方向等方面都有一些局限。我們將在第六章中詳細討論這些局限。



自動產生的Add方法測試頁

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





Calc Web service的WSDL文檔。注意,為了顯示更多內容,所有的XML元素都已摺疊起來。
Calc Web service的WSDL文檔。注意,為了顯示更多內容,所有的XML元素都已摺疊起來。
要在.NET中調用一個Web service ,你需要先運行wsdl.exe工具。這個工具會從Web service中讀出它的WSDL描述文檔,產生一個可以調用這個Web service的代理類。例如,在命令列中執行下面的命令,可以產生Calc Web service的代理類:
wsdl.exe /language:VB http://localhost/myService/calc_vb.asmx?wsdl
程式清單1-2截取自產生的VB代理類源碼。這個代理類繼承自System.Web.Services.Protocols.SoapHttpClientProtocol類,並且暴露出一個Add方法,這個方法接收兩個double型浮點數,返回一個double型浮點數。
程式清單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
此後的工作就非常簡單了。要調用CalculatorWeb service,只需執行個體化一個Calc的代理對象,再調用它的Add方法:
Dim ws As New Calc()
Dim result As Double = ws.Add(20.5, 10.9)
MessageBox.Show("結果是:" &result.ToString)


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

當然,除了上面的這些示範之外,.NET Web service的建立和調用還有很多的內容。不過,在深入這些細節之前,我們需要先理解Webservice裡面的幾個關鍵技術:XSD、SOAP和WSDL。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。