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