資料庫.NET中的Web service的開發

iDotNetSpace發表於2008-07-14
.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)
  
  Imports System.Web.Services
  Public Class Calc
   _
  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測試頁
  
  在測試頁裡點選Add方法,你會得到一個HTML表單,用來測試這個方法。在這個表單裡,Add方法所接受的所有引數都有一個相應的文字框。填好所有的引數,點選"Invoke"按鈕,這個表單就會被提交到Web伺服器。實際上,這就是通過HTTP GET的形式在呼叫Web service。得到的結果是一個如下的簡單XML文件:
  
  158
  
  瀏覽下面這個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元素都已摺疊起來。
  
  要在.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
  '省略其他程式碼
    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 bject = 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 的返回值返回給呼叫者。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-400061/,如需轉載,請註明出處,否則將追究法律責任。

相關文章