作者:Alexis
出處:http://www.cnblogs.com/alexis/
關于作者:專注于Windows Phone 7、Silverlight、Web前端(jQuery)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過shuifengxuATgmail.com 聯系我,非常感謝。
?
Web Service的宗旨是創建不需要用戶界面就能與其他應用程序交互的Web應用程序。
舉例說明它的優點,假如你正在為一家股票投資公司創建網站,你并不需要把不同證劵交易所得數據庫與自己的后臺數據庫進行整合,因為你的應用程序可以使用Web Service,并使用XML格式交換數據。
Web Service是松耦合的,它與服務器端和客戶端使用的操作系統、編程語言都無關。假如你既擁有客戶端又有服務器端的訪問和管理權,這種情況更適合用.NET?的Remoting技術,而不是Web service。
創建Web Service必須保證的是,服務器端和客戶端都要支持HTTP、SOAP(簡單對象訪問協議)和XML等行業標準協議。
?
Web Service是如何工作的
Web Service允許兩個程序之間交換XML文檔。在這個架構的頂層,微軟實現了一個遠程過程調用(Remote Procedure Call,PRC)模型。
Web Service架構包括以下特性:
1。WebServcie的服務器端和客戶端應用程序都能夠連接到互聯網。
2。用于進行通信的數據格式必須遵守相同的開放標準,并且在大多數情況下,這個標準幾乎總是SOAP。
3。客戶端和服務器端的系統是松耦合的。即Web Service不關心客戶端和服務器端所使用的操作系統、對象模型或者編程語言。只要Web Service和使用Web Service的應用程序都能夠發送和接收遵守適當協議標準的消息即可。
下圖為Web Service流程的邏輯架構

如圖所示,一個Web Service使用著會向Web Service發出一個調用請求。使用者會認為它通過Internet直接和Web Service進行交流,當然這實際上是個幻象。實際上,真正的調用由代理類完成。代理類對于Web Service使用者來說是一個本地類。代理會處理所有的負責的復雜架構,包括通過Internet發送請求道服務器、從web Service取回結果并呈現給Web Service使用者。
由于代理類在之前已在消費程序中注冊,所有一切工作才可以順利進行。注冊有開發消費程序的程序員完成。
?
開發Web Service
開發Web Service的流程與開發網頁的流程近乎一致:
1。所有構成網頁和服務的源文件都是文本文件,它們可以使用任何文本編輯器創建和修改。而類文件可以在控制臺命令行中通過命令工具進行編譯。
2。可以在vs2005及以上版本中創建網頁和Web Service
3。網頁和Web Service既可以使用代碼隱藏模型,也可以使用內聯編碼(inline coding)模型。Web Service中不需要使用代碼隱藏技術,因為Web Service并不包括任何可視化內容。
4。網頁和Web Service都充分利用了CLR和.NET Framework。
.aspx文件用于定義網頁,而.asmx文件用于定Web Service,我們可以吧Web Service想象成類,類中的一些方法通過Internet被暴露給客戶端。
代理
客戶端應用程序如果使用Web Service,必須先創建一個代理。代理是要調用的真正代碼的替身,它負責在機器邊界引導調用。在代理在客戶端應用程序中注冊后,客戶端應用程序調用方法就如調用本地對象一樣。代理接受該調用,并以適當格式封裝調用,然后以SOAP請求發送調用到服務器。當服務器返回SOAP包給客戶端后,代理會對包進行解密,并且如同從本地對象的方法返回數據一樣將其返回給客戶端應用程序。如下圖所示:

協議與標準(HTTP、XML、SOAP)
HTTP:TCP/IP協議的最上層是超文本傳輸協議(HTTP)。它是用于在網絡之間使用服務器和瀏覽器實現通訊,主要包括在服務器和瀏覽器建立連接,并將HTML傳輸到客戶端瀏覽器。當客戶端向服務器發送HTTP請求后,服務器就開始處理請求。通常,會返回HTML頁面,然后通過瀏覽器呈現。然而對Web Service而言,服務器返回的是SOAP消息,消息中包含了被調用的Web Service方法的返回數據。
HTTP請求從請求的瀏覽器出傳遞名稱和值到服務器,這種請求包括GET和POST兩種。
GET請求中,名稱和值會被附加到url上,數據是未加密的。當所有需要傳遞的數據可以使用名稱和值成對表示,而且只需要傳遞少量字段,字段長度較短時,比較適合GET請求。另外,如果不需考慮安全問題時,也可以使用GET。
POST請求中,配對的名稱和值是作為請求消息的一部分發送的。當有大量字段或者參數很長時,適合使用POST請求。從安全方面看,POST比GET更安全,因為POST請求可以被加密。和GET請求一樣,POST請求無法傳遞復雜的數據類型(如類、結構體和DataSet)。
XML:是有W3C公布的開放標準的一種描述數據的方法。
XML和HTML十分類似。不同的是HTML使用的是預定義元素,這些元素規定了HTML在瀏覽器中如何顯示,而XML的元素則是由開放人員自己定義的,所以幾乎所有的數據都可以表示。制定XML的目的是為了使其成為一種平臺無關、語言無關的標準。
XML架構(Schema)是用于定義元素已經XML文檔中或者許多XML之間元素與元素之間關聯的文件。在架構中將指定元素名稱和內容類型。HTML與XML的顯著差別:大多數HTML讀取器有很好的容錯能力,而XML讀取器則完全不同,所以XML文件的格式必須正確。另外,XML元素都是小寫的。
SOAP:(simple object access protocol,簡單對象訪問協議)是一種用于控制數據交換的XML語法。它是簡單的、輕量級的信息交換協議。SOAP消息有消息內容和一個或多個頭模塊組成,并且封裝在SOAP envelope中。
SOAP使用XML語法來格式化內容。在設計上,SOAP盡可能簡單并且提供最小化的功能。
SOAP不需HTTP的GET和POST,它不受“名稱/值”對的限制,我們可以使用它來發送復雜的對象,包括DataSet、類和其他對象。
SOAP的缺點:SOAP消息十分冗長,因此如果存在帶寬或者傳輸性能的問題,建議使用POST或GET。