引言:
微軟在其.Net戰(zhàn)略中,對其主推的Web服務(wù)做了大肆的宣揚?,F(xiàn)在,Web服務(wù)正如火如荼地發(fā)展著,相關(guān)的各項新技術(shù)層出不窮。Web服務(wù)的發(fā)展正構(gòu)筑著互聯(lián)網(wǎng)時代美好的明天。在本文中,我將向大家介紹Web服務(wù)的一些基本知識以及如何用Visual C#一步一步地創(chuàng)建一個簡單的Web服務(wù)。
一.Web服務(wù)概述:
Web服務(wù)是一種新的Web應(yīng)用程序分支,它們是自包含、自描述、模塊化的應(yīng)用,可以發(fā)布、定位、通過Web調(diào)用。Web服務(wù)可以執(zhí)行從簡單的請求到復(fù)雜商務(wù)處理的任何功能。一旦部署以后,其他Web服務(wù)應(yīng)用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務(wù)。Web服務(wù)可以把業(yè)務(wù)邏輯劃分一個一個的組件,然后在整個因特網(wǎng)的范圍上執(zhí)行其功能。所以,它是構(gòu)造分布式、模塊化應(yīng)用程序的最新技術(shù)發(fā)展趨勢。
二.為什么需要Web服務(wù)?
以前,分布式的應(yīng)用程序邏輯需要使用分布式的對象模型,通過使用DCOM、CORBA、RMI之類的基本結(jié)構(gòu),開發(fā)人員仍可擁有使用本地模型所提供的豐富資源和精確性,并可將服務(wù)置于遠(yuǎn)程系統(tǒng)中。
當(dāng)已經(jīng)有中意的中間件平臺(RMI、Jini、CORBA、DCOM 等等)時,我們?yōu)槭裁催€要為Web而煩惱呢?中間件確實提供了強(qiáng)大的服務(wù)實現(xiàn)手段,但是,這些系統(tǒng)有一個共同的缺陷,那就是它們無法擴(kuò)展到互聯(lián)網(wǎng)上:它們要求服務(wù)客戶端與系統(tǒng)提供的服務(wù)本身之間必須進(jìn)行緊密耦合,即要求一個同類基本結(jié)構(gòu)。然而這樣的系統(tǒng)往往十分脆弱:如果一端的執(zhí)行機(jī)制發(fā)生變化,那么另一端便會崩潰。例如,如果服務(wù)器應(yīng)用程序的接口發(fā)生更改,那么客戶端便會崩潰。為了能擴(kuò)展到互聯(lián)網(wǎng)運用,我們需要一種松散偶合的基本結(jié)構(gòu)來解決這個問題。如此的情況下就迎來了Web服務(wù)的誕生。
三.開發(fā)環(huán)境:
1.Windows 2000 Server操作系統(tǒng)或Windows XP操作系統(tǒng);
2..Net Framework以及Visual Studio.net開發(fā)工具。
四.創(chuàng)建Web服務(wù)工程:
我在這里向大家介紹一個美元到人民幣轉(zhuǎn)換的Web服務(wù)實例,該實例完成的功能相當(dāng)簡單,從名字我們就能知道其中的功能。但是這也是一個非常不錯的例子,特別對于初學(xué)者,能起到很好的指導(dǎo)作用。在創(chuàng)建Web服務(wù)過程中,我們用到的是C#語言。下面就是具體的項目步驟了。
首先,打開VS.net,新建一個項目,在左邊的面板中選擇“Visual C#項目”,右邊的面板中選擇“ASP.NET Web服務(wù)”,并命名為“WebService1”,圖示如下:

圖1
按下“確定”按鈕后,VS.net就開始幫你新建該項目,期間還可能會出現(xiàn)一個用來顯示Internet連接的對話框。在新建完項目后,在開發(fā)工具中會出現(xiàn)如下所示的界面:

圖2
因為我們要實現(xiàn)的是一個非常簡單的Web服務(wù),所以我們需要的功能和我們的代碼量都很小,于是就不必去考慮上圖中的“服務(wù)器資源管理器”和“工具箱”兩個超鏈接,而可以直接點擊上圖中的“此處”鏈接進(jìn)行代碼編輯,點擊后會打開代碼編輯框,圖示如下:

圖3
在上面的代碼編輯框中,我們先把原有的“Hello World”Web服務(wù)的示例代碼去掉,替換成我們的代碼,最終如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace WebService1
{
///
在上面的方法DollarConvertToRMB()中,我們返回的是一個double類型的值――Dollar*8.15,其中的8.15我想是不言而喻的(就是美元到人民幣的匯率)。不過現(xiàn)實的匯率是不固定的,而且每天都要變動,所以要根據(jù)當(dāng)天實際的匯率來計算,那么我們就要連接到數(shù)據(jù)庫獲得最新的信息了。不過,這里作為一個簡單實例,我們當(dāng)然不需要搞得那么復(fù)雜,所以在這里我就姑且假定匯率為1:8.15。
同時,我們還需要注意,在該Web服務(wù)的代碼中我們用到了using System.Web、using System.Web.Services等名字空間,作為Web服務(wù)開發(fā),這些名字空間是顯然不能缺的,沒有了這些,我們就不能調(diào)用.Net框架為我們提供的開發(fā)Web服務(wù)所必須的方法和函數(shù)等,所以一定不能忘掉。
到此為止,代碼編寫已經(jīng)完畢,然后把代碼文件存放在某個虛擬目錄下(通常是C:/Inetpub/wwwroot/WebService1)即可。把文件保存為Service1.asmx。Asmx文件擴(kuò)展名是.NET Web服務(wù)的標(biāo)記。保存文件之后,你的Web服務(wù)就準(zhǔn)備露臉了。
五.測試Web服務(wù):
現(xiàn)在準(zhǔn)備好測試Web服務(wù)。期間你不必通過顯式的編譯全過程,只需要地在目錄下保存文件然后調(diào)用它即可。為了調(diào)用最新創(chuàng)建的服務(wù),請打開你的瀏覽器并輸入服務(wù)路徑,包括Asmx文件的名字。如果你把服務(wù)放了在C:/Inetpub/wwwroot/WebService1目錄下,那么你要在瀏覽器地址欄上鍵入http://localhost/WebService1/Service1.asmx。(當(dāng)然,在你使用VS.net開發(fā)時,你也可以通過Ctrl+F5直接進(jìn)行Web服務(wù)的測試。)
在調(diào)用服務(wù)時會顯示一幅包含大量信息的網(wǎng)頁。一開始這可能會令你覺得有點糊涂:不管怎么說,你還沒有為這種服務(wù)創(chuàng)造過HTML網(wǎng)頁。其實,你根本不必創(chuàng)建測試網(wǎng)頁,因為.NET框架已經(jīng)幫你這個忙了。當(dāng)你直接通過瀏覽器調(diào)用Web服務(wù)時,框架就會為你產(chǎn)生一個網(wǎng)頁并通過它向你顯示W(wǎng)eb服務(wù)的信息,同時列出所有可用的方法。下圖即是Web服務(wù)的網(wǎng)頁。
圖4
在這個例子中列出的方法沒什么特別之處,因為僅有一個方法(DollarConvertToRMB)。鼠標(biāo)點擊這個方法會顯示另一個網(wǎng)頁,如圖5所示。這一頁就是該特定方法的測試頁,其中包括對應(yīng)方法接受的每個參數(shù)的文本框?,F(xiàn)在請在文本框中輸入“10”并按下“調(diào)用”按鈕。
圖5
單擊“調(diào)用”按鈕會打開一個新的瀏覽器窗口,其中顯示了一些XML代碼。這些XML代碼是由該Web服務(wù)返回的,其中包括了服務(wù)的結(jié)果。返回的XML代碼如下圖所示:
圖6
返回的結(jié)果是一些XML代碼,可能用戶界面顯得不那么友好,但是這些結(jié)果確實不一定非要采取對用戶友好的格式,因為你通常不會從瀏覽器直接調(diào)用Web服務(wù)。相反,你往往從應(yīng)用程序調(diào)用Web服務(wù)同時適當(dāng)?shù)靥幚矸祷氐腦ML代碼。不過,也很容易從上面的代碼看出Web服務(wù)已經(jīng)把10美元轉(zhuǎn)換成了81.5人民幣了。
六.總結(jié):
上面舉的這個例子很簡單,它完成的任務(wù)是:創(chuàng)建一個組件,如果組件放在Web服務(wù)器上就可以被世界上任何地方的任何人訪問??蛻舨槐匮b載COM 或DCOM;甚至也不必?fù)碛蠾indows客戶程序。任何能創(chuàng)建HTTP連接的客戶程序都能調(diào)用Web服務(wù)并且收到結(jié)果。這種功能開辟了創(chuàng)建分布式應(yīng)用程序、實現(xiàn)平臺之間互操作的全新領(lǐng)域。同時,我們也不難發(fā)現(xiàn)用VS.net開發(fā)Web服務(wù)是一件相當(dāng)容易的事。有興趣的讀者可以試著開發(fā)出功能更強(qiáng)大的Web服務(wù)并將它賦予實際應(yīng)用之中。
新聞熱點
疑難解答
圖片精選