監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設計管理系統(tǒng) | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產品資料
X 關閉

如何創(chuàng)建Web服務

申請免費試用、咨詢電話:400-8352-114

文章來源:泛普軟件 .NET最強大的一個方面之一就是可以利用它創(chuàng)建Web服務。一個Web服務就是一個網(wǎng)站所提供的供其它網(wǎng)站調用的外部接口。舉個例子來說,某個金融公司可以為與它的貿易伙伴通過Web服務提供詳細的股票報價,這些信息可以是通過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)

發(fā)布:2007-04-22 09:58    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
南昌OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統(tǒng)

QQ在線咨詢

泛普南昌OA信息化其他應用

南昌OA軟件 南昌OA新聞動態(tài) 南昌OA信息化 南昌OA快博 南昌OA行業(yè)資訊 南昌軟件開發(fā)公司 南昌門禁系統(tǒng) 南昌物業(yè)管理軟件 南昌倉庫管理軟件 南昌餐飲管理軟件 南昌網(wǎng)站建設公司