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

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

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