下面是我關于Web服務的一點學習小結,當然還是非常的簡單粗淺.希望對大家能有所幫助.更歡迎批評指正. 如何創建并且使用 Web 服務 創建 Web 服務 一般來說有 2 種方式來創建 Web 服務 l 直接編寫 Web" name="description" />
MILY: 楷體_GB2312; mso-hansi-font-family: 華文中宋">下面是我關于Web服務的一點學習小結,當然還是非常的簡單粗淺.希望對大家能有所幫助.更歡迎批評指正.
如何創建并且使用Web服務
一般來說有2種方式來創建Web服務
l 直接編寫Web服務文件(*.asmx);
l 首先實現業務對象,然后僅僅用asmx文件曝露;
注意: *.asmx是ASP.NET Web服務的擴展名,并不是所有的Web服務都是此方式供用戶測試,其他廠商提供的Web服務往往只是一個Port.
1. 創建簡單Web服務文件
<%@ WebService Language = C# Class = HelloMessage %> using System; using System.Web.Services; public class HelloMessage : WebSerive { [WebMethod] public string SayHello(string strName) { return “Hello, ” + strName; } } |
首先需要加入 WebService的編譯指令以指明其是一個Web服務,接下來是語言屬性,和一個Web服務類的屬性class.
注意:在一個asmx文件中可以有很多類,當時只能有一個用于Web服務.
HelloMessage繼承了System.Web.Services.WebService這個類.
[WebMethod]這個屬性一定要加到想要使用的Web方法前.注意該方法的Modifier必須是public.
希望用戶訪問的web方法一定要是公用的,且必須包含屬性[WebMethod].含有該屬性的方法將把所有調用者都看作是本地的.
[WebMethod]屬性的進一步說明可以參看ASP.NET21.
2. 業務對象法
可以使用已有的業務對象來創建Web服務,可以大大的降低工作量.當然為了啟動服務支持,必須做一些相應的修改.簡單來說,需要做三件事:
l 對象必須從WebService類繼承;
l 給要暴露的方法加上[WebMethod]屬性,當然Modifier也必須是public;
l 把返回值是XXDataReader的改為DataSet,因為前者無法通過XML傳輸;
注意:因為只有從WebService繼承而來的類才會作為服務暴露給客戶,所以您可以在同一個文件中創建對象的多個版本.
然后,將業務對象編譯成程序集放在相應的目錄下.
然后構建暴露業務對象服務的.asmx文件,非常簡單,只需要一句.
<%@ WebSerive Class = YourNamespace.YourServiceClass %> |
對于.NET 框架建立的Web服務而言,直接在IE瀏覽器中就可以看到測試界面了.比如:
http://www.hillfree.com/myservice.asmx
一般來說可以看到Web服務類和Web方法. 調用Web服務可以有三種方法.(當然,不是所有的Web方法都可以用三種方法調用.):
1. SOAP
2. HTTP-GET
3. HTTP-POST
使用SOAP調用服務傳遞命令和參數,可以使用很多基于XML的數據類型.(i.e. Array, class, DataSet, primitive, xmlNode etc.)
但如果使用HTTP GET或HTTP POST, 則只能使用這些協議所能處理的類型.一般就是primitive基本類型和數組. 此外HTTP GET/POST也只能發送名值對,不能傳遞復雜的數據類型.
需要查看相關的說明文件時,可以輸入:
http://www.hillfree.com/myservice.asmx?WSDL
這是一個xml文件.
使用Web服務,一般包括三個步驟
1. 發現服務
2. 生成服務的代理
3. 編寫客戶端程序,使用代理調用所需的服務.
發現服務:
使用disco.exe工具來發現Web站點的Web服務,如:
disco http://localhost/service/day/fain.disco
生成服務代理類
使用wsdl.exe 工具生成Web服務代理類.如下:
wsdl http://www.hillfree.com/service.asmx?wsdl
//如果直接知道wsdl的url,就不要發現那一步了.
這樣默認生成的是C#的類. 當然,如果已經有了WSDL文件就可以直接:
wsdl service.wsdl
接下來,您可以直接使用該類文件,或者將其編譯為程序集使用.
簡要介紹一下代理類:
生成的代理類包含一個來自System.Web.Services的屬性[WebServiceBindingAttribute].
該屬性定義了這個類必須使用的接口.
另外,此類是從SoapHttpClientProtocol繼承而來的,它通過SOAP和Web服務遠程通信.代理類中包含一個構造函數,它設置了Web服務的URL.