如何建立和使用Web服務

來源:互聯網
上載者:User
web|web服務|建立

簡介

.NET最強大的一個方面之一就是可以利用它建立Web服務。一個Web服務就是一個網站所提供的供其它網站調用的外部介面。舉個例子來說,某個金融公司可以為與它的貿易夥伴通過Web服務提供詳細的股票報價,這些資訊可以是通過Web頁面進行讀取和顯示的,也可以是從客戶的案頭電腦的應用程式裡讀取的。

本文就對Web服務的其中兩個方面進行說明:一是如何建立Web服務;二是如何使用Web服務。作為例子,我們以來自ASPFAQs.com(http://www.aspfaqs.com/aspfaqs/)的FAQS(常見問題集)的Web服務來解釋如何建立一個Web服務。

建立Web服務

在你建立一個Web服務之前,你首先必須問問自己:“我要向我的使用者提供什麼服務?”。本文的目標就是建立這樣一個Web服務:讓其它的使用者在他們自己的網站上顯示來自ASPFAQs.com的常見問題集(FAQS)的列表。比較理想的功能是限制其他的網站只能夠查看FAQS分類和按分類排列的FAQS,如果你想查看一個問題的答案,就讓使用者去訪問提供服務的網站http://www.aspfaqs.com。本文例子的Web服務最終向其他網站提供如下的功能:

1,瀏覽所有FAQ分類的列表
2,瀏覽某一分類裡的所有FAQS。
3,瀏覽某一個FAQ的問題,但不包含答案。

建立一個Web服務是很簡單的,首先建立一個.asmx檔案(你可以用Visual Studio .NET或你自己喜歡的任何文字編輯器,推薦使用Web Matrix,它有建立Web服務的模板),Web服務作為一個普通的類進行建立,在方法的前面有一個宏,表明這個方法是通過Web服務來訪問的。

就ASPFAQS.com的Web服務來說,首先建立三個通過Web服務訪問的方法,GetCategories, GetFAQsInCategory和GetFAQ,分別實現上面提出的任務1,2,3。並建立一個私人方法GetDataSet,按傳遞過來的SQL查詢組裝成一個DataSet。下面就是實現的代碼:

&lt;%@ WebService Language="VB" Class="ASPFAQs" %&gt;Imports System.Web.ServicesImports System.DataImports System.Data.SqlClientImports System.ConfigurationPublic Class ASPFAQs ' 建立私人功能方法GetDataSet Private Function GetDataSet(strSQL as String) as DataSet '1. 建立一個SqlConnection連線物件 Dim myConnection as New SqlConnection(ConnectionString) '2. 建立COMMAND對象,傳入SQL參數 Dim myCommand as New SqlCommand(strSQL, myConnection) myConnection.Open() '3. 建立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 ' 建立實現實現三個任務的方法 <WebMethod()> Public Function GetCategories() as DataSet Return GetDataSet(SQL Query) '這裡的參數SQL用來得到所有FAQ分類 End Function <WebMethod()> Public Function GetFAQsInCategory(catID as Integer) as DataSet Return GetDataSet(SQL Query) '這裡的參數SQL用來得到某分類(catID)的所有FAQ End Function <WebMethod()> Public Function GetFAQ(FAQID as Integer) as DataSet Return GetDataSet(SQL Query) '這裡的參數SQL用來得到某FAQ(FAQID)的資訊 End FunctionEnd Class

正如前面所說的那樣,三個通過Web服務訪問的方法都有前置字元,在.asmx檔案的第一行有一個@WebService標明所使用的語言和類名。這個Web服務名為ASPFAQs,和類同名。一旦建立好了.asmx檔案,就把它儲存到可通過Web訪問的目錄下,然後就可以通過Web瀏覽器進行訪問。例如:假如Web服務檔案名稱字是ASPFAQs.asmx,並儲存到/WS目錄下,這樣任何人就可以通過http://aspnet.4guysfromrolla.com/WS/ASPFAQs.asmx進行訪問,就可以看到Web服務使用的所有公用方法,你還可以提供輸入參數看到返回的結果。

需要說明的是:你在進行需要參數的Web服務的方法的調用時,不必擔心傳入參數的類型是否正確,Web服務代碼會自動確保傳入參數類型的正確性,在上面的例子中參數類型為整型,如果惡意的使用者企圖向Web服務傳入象0 'malicious SQL statement這樣的參數,就會返回錯誤的資訊:annot convert 0 'malicious SQL to System.Int32. Parameter name: type --> Input string was not in a correct format。然而,如果你傳入字串類型的參數,你應當記住把單個撇號(’)替換成兩個連續的撇號('')。

使用Web服務

上面,我們建立了Web服務,下面就看看別的網站如何使用這個Web服務。為了方便起見,我們把使用Web服務的客戶網站叫做“消費者”,把提供Web服務網站就“生產者”。最本質的東西就是消費者必須知道要調用生產者的什麼方法。如果需要參數的話,這些參數必須轉換成XML格式進行傳入,消費者向生產者發送HTTP請求,並指明要調用的方法和參數,參數可以是通過QueryString形式的SOAP請求或者是以POST的要求標頭的形式進行傳遞。

生產者收到發送過來的請求後,對輸入參數進行解包,並調用指定類的適當的方法。如果調用完成,就把結果返回,進行打包,然後發送回消費者。消費者收到響應結果,進行解包,就完成了Web服務的調用。

很明顯,其實我們在使用Web服務時一點也不用擔心發送的HTTP資訊的語義,為了達到這樣的目的,我們可以使用一個叫做Proxy的類,Proxy的作用是充當消費者應用程式或Web頁面和生產者實際Web服務之間的中間過程。對生產者Web服務的每一個方法來說,同時也在Proxy類裡有一個相同的方法,Proxy的職責就是處理所有傳送的複雜訊息,這種複雜性在Proxy類裡被隱藏起來的,我們只需要簡單地調用該類的方法即可,不必關心語義的事情。

此時你也許很迷惑,但這種迷惑也是可以理解的,這本身就是一個很令人迷惑的話題。要理解的最基本的事情就是:當調用Web服務時消費者和生產者之間的HTTP通訊可能是複雜的,而且可能會需要編寫不少的代碼。我們更願意看到的是,使用Web服務的頁面調用Web服務時就象使用一個本地的組件一樣方便,為了實現這一目標,我們使用Proxy類,它的公用介面與Web服務的方法相對應。如果你此時還感到迷惑的話,請看看這個示範文檔http://aspnet.4guysfromrolla.com/code/ConsumeWS.ppt,它將向你解釋如何使用Web服務。

利用Visual Studio .NET建立Proxy類

在Visual Studio .NET裡建立Web服務使用的Proxy類是件輕而易舉事情,在ASP.NET Web項目裡,在“引用”上單擊右鍵,選擇“添加Web引用”,這時會彈出一個對話方塊,要你輸入一個URL地址,請輸入http://aspnet.4guysfromrolla.com/ws/ASPFAQs.asmx,然後你就會看到這個Web服務的描述(就象你在Web瀏覽器裡直接看到的那樣),最後單擊“添加引用”按鈕,Visual Studio .NET會自動為你建立一個Proxy類,並且進行編譯。當你把它添加進你的工程裡時,Proxy類的名稱空間可能就是你的網站地址,比如:com.4guysfromrolla.aspnet,當然你還可以任意改成其他的任何名字。從你的Web頁面裡通過Proxy類調用Web服務就象你使用本機群組件進行調用一樣方便。假設你想顯示ASP.NET類別(category ID為22)FAQS的列表,我們可以通過調用Web服務的GetFAQsInCategory方法,在參數裡傳入22,並把返回的DataSet綁定到一個DataGrid,代碼可能象如下的寫法那樣:

'.aspx 頁面中的其他HTML內容......Private Sub Page_Load(sender as Object, e as EventArgs) '建立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方法時,會進行複雜的資料通訊(HTTP的請求/響應)。

結論

在本文裡,我們講述了如何建立Web服務,並如何在ASP.NET頁面裡使用它。微軟公司實際上在.NET裡已經簡化了建立和使用Web服務的過程。建立一個Web服務簡單到只需建立.asmx檔案,然後為Web服務的方法寫一點代碼,並添加宏,那些代碼看上去就和本機群組件代碼一樣。使用Web服務也是很簡單,這還要歸功於Proxy類的使用。如前所述,利用諸如Visual Studio .NET那樣的工具來建立一個Proxy類也是非常簡單的。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。