“MS.NET平臺內(nèi)建了對Web Service的支持,包括Web Service的構(gòu)建和使用。與其它開發(fā)平臺不同,使用.NET平臺,你不需要其他的工具或者SDK就可以完成Web Service的開發(fā)了。.NET Framework本身就全面支持Web Service,包括服務(wù)器端的請求處理器和對客戶端發(fā)送和接受SOAP消息的支持”(前面這句話是icech借用別人的)。本文將一步一步帶你用Microsoft Visual Studio .NET 2003(后面簡稱VS.Net 2003)創(chuàng)建和使用一個簡單的Web Service。
1、用VS.Net 2003創(chuàng)建一個最簡單的Web Service
首先,打開VS.Net 2003, 按Ctrl+Shift+N(或者打開“文件-新建-項目”),選擇“ASP.NET Web服務(wù)”。生成WebService默認文件是Service1.asmx。
(圖1)
查看Service1.asmx.cs代碼,你會發(fā)現(xiàn)VS.Net 2003已經(jīng)為Web Service文件建立了缺省的框架。原始代碼為:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace WebService1 #region 組件設(shè)計器生成的代碼 /// // WEB 服務(wù)示例 // [WebMethod] |
直接使用“WEB 服務(wù)示例”,我們先看一下最簡單的Web Service是什么樣子的。去掉53~58行的注釋后(如代碼2),直接按F5編譯查看效果。
[WebMethod] public string HelloWorld() { return "Hello World"; } |
點擊顯示頁面(如圖2)中的“HelloWorld”超鏈接,跳轉(zhuǎn)到下一頁面(如圖3)
(圖2)
(圖3)
再點擊“調(diào)用”按鈕,就可以看到用XML格式返回的Web Service結(jié)果(如圖4)。說明我們的Web Service環(huán)境沒有問題,而且還初步接觸了一下最簡單的Web Service。
(圖4)
2、創(chuàng)建一個簡單帶有功能的Web Service
網(wǎng)上有很多例子都是計算a+b=sum和顯示問候語的,所以我們也來練習一下。我們建立一個整數(shù)加法和顯示西部E網(wǎng)問候語的Web Service的例子,然后我們在下一節(jié)練習如何調(diào)用它。
另外:WebMethod和WebService都有一個Description屬性,功能就是描述一下服務(wù)功能,具體方法可見:
[WebMethod(Description="計算a+b=sum的功能")]和
[WebService (Namespace="http://www.wsalc.com", Description = "<font color='#FF0000'><b>用 VS.NET 開發(fā)一個 Web Service 實例< /b></font>")]
[WebMethod(Description="計算a+b=sum的功能")] public int Add(int a,int b) { return a+b; } [WebMethod(Description="顯示問候語的功能")] |
(代碼3)
運行后顯示的結(jié)果如圖5,具體的操作和測試方式就不細說了,和上面的HelloWorld差不多。如果測試正確性,可以輸入“http://localhost/WebService1/Service1.asmx/Show?yourname=icech”或者“http://localhost/WebService1/Service1.asmx/Add?a=3&b=6”(如圖6)。
(圖5)
(圖6)
3、用ASP調(diào)用Web Service
如果要用ASP來調(diào)用WevService,就一定要使用SOAP Toolkit或者XMLHTTP, 使用SOAP Client需要專門安裝SOAP Toolkit,這對客戶端來說不具有通用性,因此我們就學習使用XML來進行對WebService的調(diào)用。
<% Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP") Set xmlDOC =Server.CreateObject("MSXML.DOMDocument") strWebserviceURL = "http://localhost/WebService1/Service1.asmx/Add" '設(shè)置參數(shù)和值 strRequest = "a=5&b=6" objHTTP.Open "POST", strWebserviceURL, False '設(shè)置Content-Type很重要 objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" objHTTP.Send(strRequest) bOK = xmlDOC.load(objHTTP.responseXML) '查看狀態(tài)值 if objHTTP.Status=200 then xmlStr = xmlDOC.xml xmlStr = Replace(xmlStr,"<","<",1,-1,1) xmlStr = Replace(xmlStr,">",">",1,-1,1) Response.Write xmlStr else Response.Write objHTTP.Statu&"<br>" Response.Write objHTTP.StatusText end if %> |
注意:代碼中的“http://localhost/WebService1/Service1.asmx/Add”是在第2節(jié)中其中“計算a+b=sum功能”的Web Service地址。
以上代碼在本地測試都沒有問題(在部署webservice的本地機器上測試的),然而把strWebserviceURL = "http://localhost/WebService1/Service1.asmx/Add"改為部署在其他機器上的WebService時,卻出了問題,結(jié)果一直是返回500錯誤,即objHTTP.Status一直都為500。
原因在于.Net Framework1.1默認不支持HttpGet和HttpPost。如果修改webservice里的web.config增加上代碼5后,上代碼就可以調(diào)用遠程機器上的WebService了。
<webServices> <protocols> <add name="HttpPost"/> <add name="HttpGet"/> </protocols> </webServices> |
4、用VBScript調(diào)用Web Service
大家都清楚,其實VB、ASP、VBScript的語法和代碼都及其相似,其實寫出來他們其中任何一個都能出來另外幾個。
<script language="vbscript"> Set objHTTP = CreateObject("MSXML2.XMLHTTP") Set xmlDOC =CreateObject("MSXML.DOMDocument") strWebserviceURL = "http://icech/WebService1/Service1.asmx/Add" '設(shè)置參數(shù)和值 strRequest = "a=2&b=3" objHTTP.Open "POST", strWebserviceURL, False '設(shè)置Content-Type很重要 objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" objHTTP.Send(strRequest) bOK = xmlDOC.load(objHTTP.responseXML) '查看狀態(tài)值,這里是用MsgBox的方式顯示的,你可以根據(jù) '自己的需要用其他方式顯示 msgBox objHTTP.Status msgbox objHTTP.StatusText 'objHTTP.Status=200,這里就可以處理返回的xml片段了 '如果需要,可以替換返回的xml字符串當中的<和> xmlStr = xmlDOC.xml xmlStr = Replace(xmlStr,"<","<",1,-1,1) xmlStr = Replace(xmlStr,">",">",1,-1,1) msgbox xmlStr </script> |
5、用ASP.Net調(diào)用Web Service
在VS.Net 2003中新建窗體(我這里使用的C#),我這里的文件是WebForm1.aspx,編輯WebForm1.aspx.cs代碼。
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace WebService1 #region Web 窗體設(shè)計器生成的代碼 |
這些都是最基本最常見的一些測試,網(wǎng)上有很多,icech只是進行了整理,希望對初學的朋友能夠有所幫助。我的網(wǎng)站地址是http://www.wsalc.com/,論壇地址是http://bbs.weste.net/。
后面我還會繼續(xù)對Web Service進行一些學習,主要是針對數(shù)據(jù)庫和更加復雜和實用的一些功能,希望大家能夠喜歡。