標籤:windows 分布式應用 程式 調用 sevice udp 通過 使用者 forms
可以這樣簡單理解:WCF是微軟的基於.net平台的一種分布式服務架構。wcf和webservice都是SOA的實現方式。wcf是微軟特有的。webservice則是通用的一種服務。wcf是webservice的一個細化。
Web Service:嚴格來說是行業標準,也就是Web Service 規範,也稱作WS-*規範,既不是架構,也不是技術。
它有一套完成的規範體系標準,而且在持續不斷的更新完善中。
它使用XML擴充標記語言來表示資料(這個是誇語言和平台的關鍵)。微軟的Web服務實現稱為ASP.NET Web Service.它使用Soap簡易物件存取通訊協定 (SOAP)來實現分布式環境裡應用程式之間的資料互動。WSDL來實現服務介面相關的描述。此外Web services 可以註冊到UDDI中心.供其客戶尋找使用。
後來微軟做了ASP.NET Web Service的安全,效能,資料加密、解密,託管宿主等多方面的擴充,稱為WSE系列,這個是過度產品,最高到WSE3.0.後來就是WCF時代。
【2】ASP.NET Web Service:微軟提供了Web服務的開發架構,屬於ASP.NET Framework的一部分,但是支援早起的WS規範。比如SOAP1.1。
【3】WCF:WCF 是一個分布式應用的開發架構,屬於特定的技術,或者平台。既不是標準也不是規範。
WCF其實一定程度上就是ASP.NET Web Service,因為它支援Web Service的行業標準和核心協議,因此ASP.NET Web Service和WSE能做的事情,它幾乎都能勝任,跨平台和語言更不是問題(資料也支援XML格式化,而且提供了自己的格式化器)。
但是WCF作為微軟主推一個通訊群組件或者平台,它的目標不僅僅是在支援和整合Web Service,因為它還相容和具備了微軟早期很多技術的特性。
根據微軟官方的解釋,WCF(之前的版本名為“Indigo”)是使用Managed 程式碼建立和運行面向服務(Service Oriented)應用程式的統一架構。它使得開發人員能夠建立一個跨平台的安全、可信賴、事務性的解決方案,且能與已有系統相容協作。WCF是微軟分布式應用程式開發的集大成者,它整合了.Net平台下所有的和分布式系統有關的技術,如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ訊息佇列。以通訊(Communiation)範圍而論,它可以跨進程、跨機器、跨子網、企業網乃至於 Internet;以宿主程式而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支援的協議包括TCP,HTTP,跨進程以及自訂,安全模式則包括SAML, Kerberos,X509,使用者/密碼,自訂等多種標準與模式。也就是說,在WCF架構下,開發基於SOA的分布式系統變得容易了,微軟將所有與此相關的技術要素都包含在內,掌握了WCF,就相當於掌握了叩開SOA大門的鑰匙 。如果你想對WCF學習系統化一些,必須向對如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ訊息佇列也有個詳細的認識的話,你可以看看我的部落格,在此之前我對WCF學習相關的知識都系統的進行了整理。這個是文章目錄:老徐的部落格:文章目錄 。
還有一點就是,很多人對WCF學習感興趣,當初我也是,直接奔WCF而來,其實在後來的學習中感覺吃力,因為WCF宣稱的很多特性和優勢,我們無法理解,更無法體會。文中提到了很多微軟的早期技術如果都沒有接觸過,這些對比我們就無法有深刻的體會。
【4】結論:
那麼我們看了這些分析以後,就可以知道以上的結論為什麼錯誤了。
不能哪一個技術架構和行業標準作比較,任何對於二者的比較 都是錯誤的,因為兩者根不不在同一個範疇裡。就好比不能拿個汽車和交通法規比較一樣。這是個誤區。
Web Service太舊了:架構都版本的差異,功能特性上卻是有新舊之分,但是對於特定的系統,適合自己的就是最好的。 Web Service 就是 ASP.NET Web Service:同樣不是一個範疇。前者規範,後者是架構 WCF比Web Service效能好:不是一個範疇, WCF 比 ASP.NET Web Service快:不一定,需要特定的限制條件,WCF使用BasicHttpBinding的時候與ASP.NET Web Service協議一樣。 WCF比Web Service速度快:同樣概念不嚴格。 WCF比Web Service強大:WCF卻是整合了多種微軟的分布式技術,但是這裡應該嚴格說是:ASP.NET Web Service WCF比 Web Service安全:不嚴格。其次WCF也可以開發完全裸奔的應用程式。 Web Service必將被WCF取代;Web Service不會被WCF取代!前者是一套廣泛使用的規範。如果說WCF能取代的是ASP.NET Web Service,因為二者都是.NET平台上的技術。 WCF其實就是Web Service:WCF在某些情況下不遵守 Web服務規範,也就是可以開發非服務性質的應用。而且不能簡單等同。 WCF非常簡單,其實沒有什麼:WCF雖然是個服務開發架構,但是如果你深入學習,會發現WCF架構的強大之處。單單是WCF安全這一塊已經相當的複雜了。況且還要統一編程模型,相容和支援許多早期的分布式技術。很多人輕易下這樣的結論,一定是僅僅看了一些文章或書籍,不一定寫過代碼。高手不會這樣武斷地下結論。
在WCF支援的各種協議中:每種協議中訊息都有不同的傳輸格式、不同的編碼格式等等,WCF 以統一的方式來調用各種編碼器、進行傳輸。假如以後有新的協議出現,WCF並不用更改現有的架構、只用針對該協議做擴充就可以支援該協議了。這就很好地適應了變化,可以說WCF是封裝變化的絕佳實踐。
再來談談你的問題,WCF與Web 服務是什麼關係,WCF 能夠建立相容 Web 服務的服務,也就是說可以建立能夠與Web 服務互聯互連的服務,他們兩個並不能用簡單包含或者等同關係來表述。WCF 是一套架構,用來建立各種服務。其中包括建立 Web服務(採用 basicHttpBinding綁定的服務就是一個Web 服務)。
WCF可以不依賴於IIS。
WCF可以配置成BasicHttpBinding來相容(或者說變身成)WS。
WCF可以基於TCP或者MessegeQueue來傳輸資料。
WCF的可配置性比WS強,比如安全性。
WCF可以是有狀態的,並支援事務。
WCF 支援多種通訊協定 Http/Https 、TCP/UDP、MSMQ、具名管道、對等網、
訊息可達性、事務流等。
WCF 可以與ASP.NET 整合、共用一個上下文(HttpContext)。
WCF 支援多種訊息傳輸格式 :text,binary,mtom,Json 等。
WCF 安全性要強:支援對稱安全、非對稱安全、訊息安全、傳輸安全、
SSL 流安全、Windows 流安全等。
WCF 支援多種會話模式:單向、雙向、請求/響應。
WCF 支援REST 。
WCF 支援多種格式化方式。DataContractSerializer、XmlSerializer、
DataContractJsonSerializer 等。
WCF 支援 WAS hosting、Windows 服務 hosting、Self-Hosting、IIS hosting 等。
WCF 支援多種併發模式:單例、單調、會話 。
Web Service(可以應用於java平台)
1、它是基於SOAP和REST協議的
2、只支援HTTP協議
3、它不是開源的,但可以被任意一個瞭解XML的人使用
4、它只能部署在IIS上
WCF(.NET平台)
1、這個也是基於SOAP的,資料格式是XML
2、這個是Web Service(ASMX)的進化版,可以支援各種各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.
3、WCF的主要問題是,它配置起來特別的繁瑣
4、它不是開源的,但可以被任意一個瞭解XML的人使用
5、它可以部署應用程式中或者IIS上或者Windows服務中
WCF Rest
1、想使用WCF Rest service,你必須在WCF中使用webHttpBindings
2、它分別用[WebGet]和[WebInvoke]屬性,實現了HTTP的GET和POST動詞
3、要想使用其他的HTTP動詞,你需要在IIS中做一些配置,使.svc檔案可以接受這些動詞的請求
4、使用WebGet通過參數傳輸資料,也需要配置。而且必須指定UriTemplate
5、它支援XML、JSON以及ATOM這些資料格式
Web API
1、這是一個簡單的構建HTTP服務的新架構
2、在.net平台上Web API 是一個開源的、理想的、構建REST-ful 服務的技術
3、不像WCF REST Service.它可以使用HTTP的全部特點(比如URIs、request/response頭,緩衝,版本控制,多種內容格式)
4、它也支援MVC的特徵,像路由、控制器、action、filter、模型繫結、控制反轉(IOC)或依賴注入(DI),單元測試。這些可以使程式更簡單、更健壯
5、它可以部署在應用程式和IIS上
6、這是一個輕量級的架構,並且對限制頻寬的裝置,比如智能手機等支援的很好
7、Response可以被Web API的MediaTypeFormatter轉換成Json、XML 或者任何你想轉換的格式。
WCF和WEB API我該選擇哪個?
1、當你想建立一個支援訊息、訊息佇列、雙工通訊的服務時,你應該選擇WCF
2、當你想建立一個服務,可以用更快速的傳輸通道時,像TCP、Named Pipes或者甚至是UDP(在WCF4.5中),在其他傳輸通道停用時候也可以支援HTTP。
3、當你想建立一個基於HTTP的面向資源的服務並且可以使用HTTP的全部特徵時(比如URIs、request/response頭,緩衝,版本控制,多種內容格式),你應該選擇Web API
4、當你想讓你的服務用於瀏覽器、手機、iPhone和平板電腦時,你應該選擇Web API
webservice與WCF