本人對(duì)于VS2003 WebService的簡介與學(xué)習(xí)
我們必須了解什么是VS2003 WebService,就概念上來說,可能比較復(fù)雜,不過我們可以有個(gè)宏觀的了解,VS2003 WebService就是個(gè)對(duì)外的接口,里面有函數(shù)可供外部客戶調(diào)用(注意:里面同樣有客戶不可調(diào)用的函數(shù))。
webservice傳遞的數(shù)據(jù)只能是序列化的數(shù)據(jù),典型的就是xml數(shù)據(jù),這里我們也只討論xml數(shù)據(jù)的傳輸.
有了一些對(duì)xmlwebservice的初步了解后,我們將切入正題,即是用一個(gè)具體的webservice事例的形式來講解具體的webservice用法,用具體的事例來講解一個(gè)概念我想怎么也要比單純的說理能讓人容易理解吧.
這里,我們將以一個(gè)簡單的分布式課件搜索系統(tǒng)為例來講解.使用VS2003為編譯環(huán)境,C#為語言,SqlServcer2000為數(shù)據(jù)庫.(這個(gè)例子來源于一位網(wǎng)上朋友的文章的啟發(fā),覺得很能代表webservice的特點(diǎn),就按那個(gè)想法做了這么個(gè)系統(tǒng)來示例了)
首先,明確我們要做什么.我們需要一個(gè)對(duì)客戶的接口,也就是個(gè)站點(diǎn),我們把它稱做ServiceGatherSite,它是何種形式都無所謂,甚至它本身并不需要數(shù)據(jù)庫,它只是提供給用戶一個(gè)查詢的接口,真正的服務(wù),普通用戶是不接觸到的.然后,這里我們還需要若干個(gè)提供服務(wù)的站點(diǎn),我們可以稱它們?yōu)橘Y源站,這里為簡單起見,假設(shè)有兩個(gè)資源站,分別叫WebSiteA,WebSiteB,它們可以是不對(duì)外公布的,只是為了豐富查詢數(shù)據(jù)而存在.最后,是我們最需要關(guān)注的東西---資源站提供給ServiceGatherSite的服務(wù).兩個(gè)資源站,就有兩個(gè)服務(wù),我們稱為SiteAService和SiteBService.兩個(gè)服務(wù)間沒有任何關(guān)系,內(nèi)部提供的方法也完全沒關(guān)聯(lián),只是需要把方法如何使用告訴ServiceGatherSite,意思是,服務(wù)只提供查詢接口,返回的數(shù)據(jù)如何處理,服務(wù)本身并不管,全由使用服務(wù)的站點(diǎn)分配.#t#
寫了這么多,算是簡要的介紹了下有關(guān)xmlwebservice的概念和我們這個(gè)例子的結(jié)構(gòu),下篇文章,我們將開始真正進(jìn)入代碼的設(shè)計(jì)階段.
上篇文章介紹了些VS2003 WebService的基本特性和我們例子的結(jié)構(gòu),這篇文章我們將開始具體的代碼編寫工作.這個(gè)專題主要講述的是webservice,因此這里我們的代碼以Webservice相關(guān)為主,而其他工程,例如:ServiceGatherSite,WebSiteA等,只將簡略介紹.在VS2003中,開發(fā)一個(gè)webservice并不是件困難的事,首先,我們新建一個(gè)webservice項(xiàng)目(文件->新建->項(xiàng)目->C#->Web服務(wù)應(yīng)用程序)
建完這個(gè)工程,我們將看到一個(gè)叫Service1.asmx的文件,這就是VS2003 WebService的標(biāo)準(zhǔn)文件,它也有UI的概念,不過我們一般不關(guān)注,因此,我們查看其cs代碼文件.如果你什么都還沒做的話,將看見一個(gè)被注釋掉的helloworld的WebMethod,把注釋去掉,在運(yùn)行,你就可以得到最簡單的webservice運(yùn)行實(shí)例了.點(diǎn)擊"helloworld"將執(zhí)行其方法.顯然,這個(gè)函數(shù)對(duì)我們的意義只在于宏觀的了解了下web服務(wù)的寫法.
下面,我們將開始具體介紹VS2003 WebService的寫法.在代碼文件里,如果我們寫了一個(gè)函數(shù)后,希望此函數(shù)成為外部可調(diào)用的接口函數(shù),我們必須在函數(shù)上面添上一行代碼[WebMethod(Description="函數(shù)的描述信息")],如果你的函數(shù)沒有這個(gè)申明,它將不能被用戶引用.如:
- [WebMethod(Description="最簡單的方法")]
- public string HelloWorld()
- {
- return "Hello World";
- }
這個(gè)函數(shù)就是外部可調(diào)用的接口函數(shù),對(duì)用戶來說相當(dāng)于一個(gè)API.如果某用戶在引用了這個(gè)服務(wù)后,他調(diào)用HelloWorld()方法,他就將獲得"HelloWorld"這個(gè)返回值.看到這里,我們是不是發(fā)現(xiàn),其實(shí)VS2003 WebService并不是那么的神秘,它也不過只是個(gè)接口,對(duì)我們而言,側(cè)重點(diǎn)依然是接口函數(shù)的編寫.下面,我將給出我們的例子所需要的接口函數(shù)。