跳到主要內容區塊

ntuccepaper2019

技術論壇

使用ASP.NET建立Web Service
  • 卷期:v0029
  • 出版日期:0001-01-01

作者:張達人 / 臺灣大學計算機及資訊網路中心程式設計組幹事

Web Services是一種軟體服務,它透過Web通訊協定及資料格式的開放式標準(例如 HTTP、XML與SOAP等)來為其他應用程式或異質系統提供服務、或進行資料交換,發展至今已廣泛被應用。原本若要建立Web Services程式設計師需要撰寫不少程式碼進行SOAP、XML解析等工作,然而透過ASP.NET,它已經為我們在Web Service上建立Web Service類別,讓程式設計師在撰寫Web Service程式時能把專注力放在程式的邏輯處理上,而不是SOAP溝通的細節,讓開發更具效率。

XML格式、SOAP協定與Web Service
屬於常見的資料格式「XML」,為可延伸標記語言(eXtensible Markup Language)的簡稱,它與HTML非常相似,皆為以標籤組成的程式語言,但格式卻更加嚴格。一個標準的XML必須符合下列規則:(範例檔案如圖一)
1. 開頭包含一個文件宣告,宣告可包含XML文件版本(version)及所使用的編碼(encoding)等資訊。
2. 必須從一個根節點開始。
3. 每一個起始標籤必須對應一個結束標籤。但可使用簡化語法,如可簡化成。
4. 標籤若有屬性則必須有值。


圖一、一個標準的XML文件

XML除了因為嚴謹規範而易於解析外,由於本身純文字的特性可以輕易地透過穿越防火牆(如使用80 port),所以自然而然具跨平台的優點,不管各方用任何程式語言,只要規範出雙方認可的XML格式即可進行溝通,進行系統間的資料交換。

另外,由XML交換訊息時必須特別注意特殊字元的處理,由於XML是由「<」與「>」所組成的標籤式語言,當遇到此類的字元會出現模擬兩可無法解析的狀況,我們在傳送前必須對其進行轉換,如表一。

特殊符號 取代字串
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;
#x0020 &#x0020
#x0009 &#x0009
#x000D &#x000D
#x000A &#x000A

表一、XML傳送前必須轉換的特殊字元

而Web Service的基本協定SOAP(Simple Object Access Protocol、簡單物件存取協定)就是以XML作為基礎在分散式環境中透過HTTP協定交換資訊。
圖二演示了Web Service的運作方式,我們以簡單的使用身高體重計算BMI數值的Web Service作為例子:


圖二、Web Service Model

1. 當Client Application試圖使用某個asmx的Web Service方法時,就會將參數序列化(serializes)成內含身高體重的SOAP Request透過http協定送出至Web Service,內容如圖三。


圖三、SOAP Request

2. Web Service收到SOAP Request後,經過還原序列化與程式的邏輯處理(BMI= 體重/身高平方)後將其傳回值序列化成SOAP Response並透過http協定將其回傳給Client Application,內容如圖四。


圖四、SOAP Response

目前計資中心各個不同開發維護人員或不同語言所建立的系統若遇到有必須整合的狀況時,就會考慮借重SOAP跨平台的特性以建立Web Service的方式來運作。

使用ASP.NET建立Web Service的步驟
在ASP.NET中Web Service被定義為asmx檔案,而asmx檔案只扮演資源檔的角色,後台的asmx.cs檔則為實際程式碼放置的區域,兩者組成一個Web Service資源。
以下針對在Visual Studio環境下建立ASP.NET(使用C#)的Web Service的工作進行進一步敘述:
1. 在[方案總管]中,以滑鼠右鍵按一下網站名稱,然後按一下[加入新項目],如圖五。


圖五、建立Web Service 步驟1:加入新項目

2. 在[Visual Studio 安裝的範本]下方,按一下[Web服務],然後在[名稱]方塊中,輸入檔名Convert,確認已選取[將程式碼置於個別檔案中]核取方塊,如圖六。


圖六、建立Web Service 步驟2:點選Web服務後輸入檔名

3. 按一下[新增]後asmx資源檔將出現在網站根目錄,asmx.cs會出現在App_code目錄下,如圖七。


圖七、建立Web Service 步驟3:產生asmx、asmx.cs檔

4. 建立檔案後即可在asmx.cs中撰寫的程式碼。Namespace後接著的是命名空間,我們可以使用URL作為命名空間以防止跟其他的Web Service混淆。位於[WebMethod]後的HelloWorld方法即為此Web Service的範例方法,現在可以著手把它更改為所欲建立的BMI計算程式,如圖八。如果需要在同一個asmx中建立多個方法,可比照上述方式加一行[WebMethod]後並於其後增加下一個方法。


圖八、建立Web Service 步驟4:撰寫負責邏輯處理的程式碼

5. 至此我們已經完成BMI計算程式的撰寫,而ASP.NET所建立的Web Service若要測試也相當簡單,我們只要按Ctrl+F5進入偵錯,就可以由淺顯易懂的網頁介面察看程式碼是否有通過編譯並測試結果,如圖九。輸入測試數值點選叫用將會顯示呼叫此方法後的回傳值。


圖九、建立Web Service 步驟5:偵錯並測試

總結
除了上述憑藉ASP.NET中內建WebService類別與WebMethod特性迅速建立Web Service的方式外,我們也可以使用自訂類別或自訂資源檔或處理常式來獲取更大的實作彈性,此部份我們不再詳述,請讀者自行參閱參考相關資料。另外如果我們能掌握XML與SOAP的結構與操作方式,即使使用了其他語言,相信只要投入苦心一定可建立一支好用的WebService程式來橋接各個不同的平台。

參考文獻
[1] Microsoft MSDN,ASP.NET XML Web Service 基本概念。http://msdn.microsoft.com/zh-tw/library/a7xexaft(v=vs.90).aspx
[1] Microsoft MSDN,逐步解說:在Visual Web Developer中建立和使用ASP.NET Web 服務。http://msdn.microsoft.com/zh-tw/library/8wbhsy70(v=vs.90).aspx
[2] 鄧文焯,資策會網站Web Services介紹。http://www.iiiedu.org.tw/knowledge/knowledge20021231_1.htm
[3] 朱毅,進入IT產業必讀的200個.NET面試決勝題: 474-550。