當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 南昌OA系統(tǒng) > 南昌OA信息化
如何創(chuàng)建Web服務(wù)
本文就對Web服務(wù)的其中兩個(gè)方面進(jìn)行說明:一是如何創(chuàng)建Web服務(wù);二是如何使用Web服務(wù)。作為例子,我們以來自ASPFAQs.com(http://www.aspfaqs.com/aspfaqs/)的FAQS(常見問題解答)的Web服務(wù)來解釋如何創(chuàng)建一個(gè)Web服務(wù)。
創(chuàng)建Web服務(wù)
在你創(chuàng)建一個(gè)Web服務(wù)之前,你首先必須問問自己:“我要向我的用戶提供什么服務(wù)?”。本文的目標(biāo)就是創(chuàng)建這樣一個(gè)Web服務(wù):讓其它的用戶在他們自己的網(wǎng)站上顯示來自ASPFAQs.com的常見問題解答(FAQS)的列表。比較理想的功能是限制其他的網(wǎng)站只能夠查看FAQS分類和按分類排列的FAQS,如果你想查看一個(gè)問題的答案,就讓用戶去訪問提供服務(wù)的網(wǎng)站http://www.aspfaqs.com。本文例子的Web服務(wù)最終向其他網(wǎng)站提供如下的功能:
1,瀏覽所有FAQ分類的列表
2,瀏覽某一分類里的所有FAQS。
3,瀏覽某一個(gè)FAQ的問題,但不包含答案。
創(chuàng)建一個(gè)Web服務(wù)是很簡單的,首先創(chuàng)建一個(gè).asmx文件(你可以用Visual Studio .NET或你自己喜歡的任何文本編輯器,推薦使用Web Matrix,它有創(chuàng)建Web服務(wù)的模板),Web服務(wù)作為一個(gè)普通的類進(jìn)行創(chuàng)建,在方法的前面有一個(gè)宏,表明這個(gè)方法是通過Web服務(wù)來訪問的。
就ASPFAQS.com的Web服務(wù)來說,首先創(chuàng)建三個(gè)通過Web服務(wù)訪問的方法,GetCategories, GetFAQsInCategory和GetFAQ,分別實(shí)現(xiàn)上面提出的任務(wù)1,2,3。并創(chuàng)建一個(gè)私有方法GetDataSet,按傳遞過來的SQL查詢組裝成一個(gè)DataSet。下面就是實(shí)現(xiàn)的代碼:
〈%@ WebService Language=“VB“ Class=“ASPFAQs“ %〉
Imports System.Web.Services
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Public Class ASPFAQs
’ 創(chuàng)建私有功能方法GetDataSet
Private Function GetDataSet(strSQL as String) as DataSet
’1. 創(chuàng)建一個(gè)SqlConnection連接對象
Dim myConnection as New SqlConnection(ConnectionString)
’2. 創(chuàng)建COMMAND對象,傳入SQL參數(shù)
Dim myCommand as New SqlCommand(strSQL, myConnection)
myConnection.Open()
’3. 創(chuàng)建DataAdapter對象
Dim myDataAdapter as New SqlDataAdapter()
myDataAdapter.SelectCommand = myCommand
’4. 生成DataSet并關(guān)閉連接
Dim myDataSet as New DataSet()
myDataAdapter.Fill(myDataSet)
myConnection.Close()
’返回DataSet
Return myDataSet
End Function
’ 創(chuàng)建實(shí)現(xiàn)實(shí)現(xiàn)三個(gè)任務(wù)的方法
〈WebMethod()〉 Public Function GetCategories() as DataSet
Return GetDataSet(SQL Query) ’這里的參數(shù)SQL用來得到所有FAQ分類
End Function
〈WebMethod()〉 Public Function GetFAQsInCategory(catID as Integer) as DataSet
Return GetDataSet(SQL Query) ’這里的參數(shù)SQL用來得到某分類(catID)的所有FAQ
End Function
〈WebMethod()〉 Public Function GetFAQ(FAQID as Integer) as DataSet
Return GetDataSet(SQL Query) ’這里的參數(shù)SQL用來得到某FAQ(FAQID)的信息
End Function
End Class
正如前面所說的那樣,三個(gè)通過Web服務(wù)訪問的方法都有前導(dǎo)符,在.asmx文件的第一行有一個(gè)@WebService標(biāo)明所使用的語言和類名。這個(gè)Web服務(wù)名為ASPFAQs,和類同名。一旦創(chuàng)建好了.asmx文件,就把它保存到可通過Web訪問的目錄下,然后就可以通過Web瀏覽器進(jìn)行訪問。例如:假如Web服務(wù)文件名字是ASPFAQs.asmx,并保存到/WS目錄下,這樣任何人就可以通過http://aspnet.4guysfromrolla.com/WS/ASPFAQs.asmx進(jìn)行訪問,就可以看到Web服務(wù)使用的所有公共方法,你還可以提供輸入?yún)?shù)看到返回的結(jié)果。
需要說明的是:你在進(jìn)行需要參數(shù)的Web服務(wù)的方法的調(diào)用時(shí),不必?fù)?dān)心傳入?yún)?shù)的類型是否正確,Web服務(wù)代碼會(huì)自動(dòng)確保傳入?yún)?shù)類型的正確性,在上面的例子中參數(shù)類型為整型,如果惡意的用戶企圖向Web服務(wù)傳入象0 ’malicious SQL statement這樣的參數(shù),就會(huì)返回錯(cuò)誤的信息:annot convert 0 ’malicious SQL to System.Int32. Parameter name: type --〉 Input string was not in a correct format。然而,如果你傳入字符串類型的參數(shù),你應(yīng)當(dāng)記住把單個(gè)撇號(’)替換成兩個(gè)連續(xù)的撇號(’’)。
使用Web服務(wù)
上面,我們創(chuàng)建了Web服務(wù),下面就看看別的網(wǎng)站如何使用這個(gè)Web服務(wù)。為了方便起見,我們把使用Web服務(wù)的客戶網(wǎng)站叫做“消費(fèi)者”,把提供Web服務(wù)網(wǎng)站就“生產(chǎn)者”。最本質(zhì)的東西就是消費(fèi)者必須知道要調(diào)用生產(chǎn)者的什么方法。如果需要參數(shù)的話,這些參數(shù)必須轉(zhuǎn)換成XML格式進(jìn)行傳入,消費(fèi)者向生產(chǎn)者發(fā)送HTTP請求,并指明要調(diào)用的方法和參數(shù),參數(shù)可以是通過QueryString形式的SOAP請求或者是以POST的請求頭的形式進(jìn)行傳遞。
生產(chǎn)者收到發(fā)送過來的請求后,對輸入?yún)?shù)進(jìn)行解包,并調(diào)用指定類的適當(dāng)?shù)姆椒āH绻{(diào)用完成,就把結(jié)果返回,進(jìn)行打包,然后發(fā)送回消費(fèi)者。消費(fèi)者收到響應(yīng)結(jié)果,進(jìn)行解包,就完成了Web服務(wù)的調(diào)用。
很明顯,其實(shí)我們在使用Web服務(wù)時(shí)一點(diǎn)也不用擔(dān)心發(fā)送的HTTP信息的語義,為了達(dá)到這樣的目的,我們可以使用一個(gè)叫做Proxy的類,Proxy的作用是充當(dāng)消費(fèi)者應(yīng)用程序或Web頁面和生產(chǎn)者實(shí)際Web服務(wù)之間的中間過程。對生產(chǎn)者Web服務(wù)的每一個(gè)方法來說,同時(shí)也在Proxy類里有一個(gè)相同的方法,Proxy的職責(zé)就是處理所有傳送的復(fù)雜消息,這種復(fù)雜性在Proxy類里被隱藏起來的,我們只需要簡單地調(diào)用該類的方法即可,不必關(guān)心語義的事情。
此時(shí)你也許很迷惑,但這種迷惑也是可以理解的,這本身就是一個(gè)很令人迷惑的話題。要理解的最基本的事情就是:當(dāng)調(diào)用Web服務(wù)時(shí)消費(fèi)者和生產(chǎn)者之間的HTTP通信可能是復(fù)雜的,而且可能會(huì)需要編寫不少的代碼。我們更愿意看到的是,使用Web服務(wù)的頁面調(diào)用Web服務(wù)時(shí)就象使用一個(gè)本地的組件一樣方便,為了實(shí)現(xiàn)這一目標(biāo),我們使用Proxy類,它的公用接口與Web服務(wù)的方法相對應(yīng)。如果你此時(shí)還感到迷惑的話,請看看這個(gè)演示文檔http://aspnet.4guysfromrolla.com/code/ConsumeWS.ppt,它將向你解釋如何使用Web服務(wù)。
利用 Visual Studio .NET 創(chuàng)建 Proxy 類
在Visual Studio .NET里創(chuàng)建Web服務(wù)使用的Proxy類是件輕而易舉的事情,在ASP.NET Web項(xiàng)目里,在“引用”上單擊右鍵,選擇“添加Web引用”,這時(shí)會(huì)彈出一個(gè)對話框,要你輸入一個(gè)URL地址,請輸入http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx,然后你就會(huì)看到這個(gè)Web服務(wù)的描述(就象你在Web瀏覽器里直接看到的那樣),最后單擊“添加引用”按鈕,Visual Studio .NET會(huì)自動(dòng)為你創(chuàng)建一個(gè)Proxy類,并且進(jìn)行編譯。當(dāng)你把它添加進(jìn)你的工程里時(shí),Proxy類的名稱空間可能就是你的網(wǎng)站地址,比如:com.4guysfromrolla.aspnet,當(dāng)然你還可以任意改成其他的任何名字。從你的Web頁面里通過Proxy類調(diào)用Web服務(wù)就象你使用本地組件進(jìn)行調(diào)用一樣方便。假設(shè)你想顯示ASP.NET類別(category ID為22)FAQS的列表,我們可以通過調(diào)用Web服務(wù)的GetFAQsInCategory方法,在參數(shù)里傳入22,并把返回的DataSet綁定到一個(gè)DataGrid,代碼可能象如下的寫法那樣:
’.aspx 頁面中的其他HTML內(nèi)容......
〈asp:datagrid id=“dgCategoryFAQs“ runat=“server“ /〉
Private Sub Page_Load(sender as Object, e as EventArgs)
’創(chuàng)建Proxy類的實(shí)例
Dim consumeWebService as com._4guysfromrolla.aspnet.ASPFAQs
Set consumeWebService = New com._4guysfromrolla.aspnet.ASPFAQs
’把GetFAQsInCategory結(jié)果綁定到dgCategoryFAQs
dgCategoryFAQs.DataSource = consumeWebService.GetFAQsInCategory(22)
dgCategoryFAQs.DataBind()
End Sub
檢查一下上面的代碼,你可能不明白對com._4guysfromrolla.aspnet.ASPFAQs Proxy類的調(diào)用實(shí)際上就是遠(yuǎn)程Web服務(wù)的調(diào)用,當(dāng)調(diào)用Proxy類的GetFAQsInCategory方法時(shí),會(huì)進(jìn)行復(fù)雜的數(shù)據(jù)通訊(HTTP的請求/響應(yīng))。
結(jié)論
在本文里,我們講述了如何創(chuàng)建Web服務(wù),并如何在ASP.NET頁面里使用它。微軟公司實(shí)際上在.NET里已經(jīng)簡化了創(chuàng)建和使用Web服務(wù)的過程。創(chuàng)建一個(gè)Web服務(wù)簡單到只需創(chuàng)建.asmx文件,然后為Web服務(wù)的方法寫一點(diǎn)代碼,并添加宏,那些代碼看上去就和本地組件代碼一樣。使用Web服務(wù)也是很簡單,這還要?dú)w功于Proxy類的使用。如前所述,利用諸如Visual Studio .NET那樣的工具來創(chuàng)建一個(gè)Proxy類也是非常簡單的。(techtarget)
- 1間諜軟件的慣用手法
- 2聚焦政務(wù)信息化 政務(wù)OA特點(diǎn)解讀
- 3OA行業(yè)產(chǎn)品型定制型誰主沉浮
- 4設(shè)置密碼的十四個(gè)訣竅
- 5Windows XP系統(tǒng)日常維護(hù)八法
- 6 南昌OA成功率何去何從
- 7現(xiàn)代企業(yè)辦公需要智能化OA
- 8BYOD推高移動(dòng)OA浪潮
- 9智能數(shù)據(jù)倉庫設(shè)計(jì)方法
- 10Windows偽優(yōu)化技巧
- 11使用VPN連接分公司
- 122013年值得關(guān)注的五大技術(shù)趨勢 微軟的創(chuàng)新
- 13OA選型幾點(diǎn)建議
- 14企業(yè)管理模式需革新 OA來應(yīng)對
- 15OA系統(tǒng)為企業(yè)創(chuàng)造更多的價(jià)值
- 16虛擬化HPC直面七大技術(shù)挑戰(zhàn)
- 17為什么網(wǎng)絡(luò)只發(fā)不收?
- 18管理思想 企業(yè)OA系統(tǒng)的靈魂
- 19OA軟件價(jià)格服務(wù)性價(jià)比您最看重哪一個(gè)?
- 20電話系統(tǒng)的下一個(gè)行動(dòng)
- 21移動(dòng)RFID系統(tǒng)的含金量何在?
- 22解決激光打印機(jī)常見故障解析
- 23利用Linux安全防護(hù)工具
- 24解析三大容災(zāi)技術(shù)
- 25淺談集團(tuán)OA系統(tǒng)的建設(shè)策略
- 26信息安全重兵守城卻無人看庫
- 27怎樣評價(jià)代理防火墻的優(yōu)劣勢?
- 28當(dāng)今最流行網(wǎng)絡(luò)攻擊六大趨勢
- 29給OA選型用戶的幾點(diǎn)中肯建議
- 30如何利用oa做好知識(shí)管理!
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓