WebService,WCF,WebApi區別與特點

在.NET平臺下,有大量的技術讓你創建一個HTTP服務,像Web Service,WCF,現在又出了Web API。在.NET平臺下,你有很多的選擇來構建一個HTTP Services。我分享一下我對Web Service、WCF以及Web API的看法。

 Web Service

  1、它是基於SOAP協議的,數據格式是XML

  2、只支持HTTP協議

  3、它不是開源的,但可以被任意一個瞭解XML的人使用

  4、它只能部署在IIS上

 WCF

  1、這個也是基於SOAP的,數據格式是XML

  2、這個是Web Service(ASMX)的進化版,可以支持各種各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.

  3、WCF的主要問題是,它配置起來特別的繁瑣

  4、它不是開源的,但可以被任意一個瞭解XML的人使用

  5、它可以部署應用程序中或者IIS上或者Windows服務中

 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?

W3C組織對其的定義如下,它是一個軟件系統,爲了支持跨網絡的機器間相互操作交互而設計。Web Service服務通常被定義爲一組模塊化的API,它們可以通過網絡進行調用,來執行遠程系統的請求服務。簡單的說:WebService即Web服務,它是一種跨編程語言和跨操作系統平臺的遠程調用技術。

所謂跨編程語言和跨操作平臺,就是說服務端程序採用Java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然!跨操作系統平臺則是指服務端程序和客戶端程序可以在不同的操作系統上運行。

所謂遠程調用,就是一臺計算機a上的一個程序可以調用到另外一臺計算機b上的一個對象的方法。譬如從天氣預報系統中獲取某個城市的天氣數據在自己系統中進行展示;從證券交易系統中獲取某隻股票的交易信息在自己的系統中進行展示;又譬如一個商城系統中能夠展示快遞的跟蹤信息,而這些信息就是通過webservice從具體的快遞公司的系統中獲取的數據。

其實可以從多個角度來理解WebService,從表面上看,WebService就是一個應用程序向外界暴露出一個能通過Web進行調用的API,也就是說能用編程的方法通過Web來調用這個應用程序。我們把調用這個WebService的應用程序叫做客戶端,而把提供這個WebService的應用程序叫做服務端。從深層次看,WebService是建立可互操作的分佈式應用程序的新平臺,是一個平臺,是一套標準。它定義了應用程序如何在Web上實現互操作性,你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。

Web Service = SOAP + HTTP + WSDL

SOAP Simple Object Access Protocol)協議是web service的主體,它通過HTTP或者SMTP等應用層協議進行通訊,自身使用XML文件來描述程序的函數方法和參數信息,從而完成不同主機的異構系統間的計算服務處理。這裏的WSDL(Web Services Description Language)web 服務描述語言也是一個XML文檔,它通過HTTP向公衆發佈,公告客戶端程序關於某個具體的 Web service服務的URL信息、方法的命名,參數,返回值等。

WebService三要素:

1.SOAP (Simple Object Access Protocol):簡易對象訪問協議,soap用來描述傳遞信息的格式。

2.WSDL (WebServices Description Language):Web服務描述語言,用來描述WebService、以及如何訪問WebService

3.UDDI (Universal Description Discovery and Integration):通用描述、發現及整合,用來管理、分發、

查詢webService。

 

什麼是WCF?

Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程序框架,可以翻譯爲Windows 通訊開發平臺。整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。是Windows平臺上開發分佈式應用最佳的實踐方式。

 

貼圖圖片

 

簡單的歸結爲四大部分:

1>.網絡服務的協議,即用什麼網絡協議開放客戶端接入。

2>.業務服務的協議,即聲明服務提供哪些業務。

3>.數據類型聲明,即對客戶端與服務器端通信的數據部分進行一致化。

4>.傳輸安全性相關的定義。

 

它是.NET框架的一部分,由 .NET Framework3.0 開始引入,與Windows Presentation Foundation及Windows Workflow Foundation並行爲新一代 Windows操作系統以及 WinFX 的三個重大應用程序開發類庫。在 .NET Framework2.0 以及前版本中,微軟發展了 Web Service(SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基礎的 Winsock 等通信支持。由於各個通信方法的設計方法不同,而且彼此之間也有相互的重疊性,對於開發人員來說,不同的選擇會有不同的程序設計模型,而且必須要重新學習,讓開發人員在使用中有許多不便。同時,面向服務架構(Service-Oriented Architecture) 也開始盛行於軟件工業中,因此微軟重新查看了這些通信方法,並設計了一個統一的程序開發模型,對於數據通信提供了最基本最有彈性的支持,這就是 Windows Communication Foundation。

 

WCF體系結構

 

Windows通信基礎(Windows Communication Foundation,WCF)是基於Windows平臺下開發和部署服務的軟件開發包(Software Development Kit,SDK)。WCF爲服務提供了運行時環境(Runtime Environment),使得開發者能夠將CLR類型公開爲服務,又能夠以CLR類型的方式使用服務。理論上講,創建服務並不一定需要WCF,但實際 上,使用WCF卻可以使得創建服務的任務事半功倍。WCF是微軟對一系列產業標準定義的實現,包括服務交互、類型轉換、封送(Marshaling)以及 各種協議的管理。

正因爲如此,WCF才能夠提供服務之間的互操作性。WCF還爲開發者提供了大多數應用程序都需要的基礎功能模塊,提高了開發者的效率。WCF的第一 個版本爲服務開發提供了許多有用的功能,包括託管(Hosting)、服務實例管理(Service Instance Management)、異步調用、可靠性、事務管理、離線隊列調用(Disconnected Queued Call)以及安全性。同時,WCF還提供了設計優雅的可擴展模型,使開發人員能夠豐富它的基礎功能。事實上,WCF自身的實現正是利用了這樣一種可擴展 模型。本書的其餘章節會專注於介紹這諸多方面的內容與特徵。WCF的大部分功能都包含在一個單獨的程序集System.ServiceModel.dll 中,命名空間爲System.ServiceModel。

WCF是.NET 3.0的一部分,同時需要.NET 2.0的支持,因此它只能運行在支持它的操作系統上。目前,這些操作系統包括Windows Vista(客戶端和服務器)、Windows XP SP2和Windows Server 2003 SP1以及更新的版本。

 

什麼是Web API?

官方解釋: 

ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework. 

WebAPI體系結構-WebService, WCF, WebApi 的區別與應用

在圖上可以看出來,Web API 與SignalR一起同爲構建Service的框架。Web API負責構建http常規服務,而SingalR主要負責的是構建實時服務,例如股票,聊天室,在線遊戲等實時性要求比較高的服務。 

  

爲什麼要用Web API?

Web API最重要的是可以構建面向各種客戶端的服務。另外與WCF REST Service不同在於,Web API利用Http協議的各個方面來表達服務(例如 URI/request response header/caching/versioning/content format),因此就省掉很多配置。

 

WebApi 功能簡介:

1.支持基於Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作。

2.通過不同的http動作表達不同的含義,這樣就不需要暴露多個API來支持這些基本操作。

3.請求的回覆通過Http Status Code表達不同含義,並且客戶端可以通過Accept header來與服務器協商格式,例如你希望服務器返回JSON格式還是XML格式。

5.請求的回覆格式支持 JSON,XML,並且可以擴展添加其他格式。

6.原生支持OData。

7.支持Self-host或者IIS host。

8.支持大多數MVC功能,例如Routing/Controller/Action Result/Filter/Model Builder/IOC Container/Dependency Injection。

什麼地方需要用Web API?

當你遇到以下這些情況的時候,就可以考慮使用Web API了。

需要Web Service但是不需要SOAP

需要在已有的WCF服務基礎上建立non-soap-based http服務

只想發佈一些簡單的Http服務,不想使用相對複雜的WCF配置

發佈的服務可能會被帶寬受限的設備訪問

希望使用開源框架,關鍵時候可以自己調試或者自定義一下框架

Web API 與MVC的區別

MVC主要用來構建網站,既關心數據也關心頁面展示,而Web API只關注數據

Web API支持格式協商,客戶端可以通過Accept header通知服務器期望的格式

Web API支持Self Host,MVC目前不支持

Web API通過不同的http verb表達不同的動作(CRUD),MVC則通過Action名字表達動作

Web API內建於ASP.NET System.Web.Http命名空間下,MVC位於System.Web.Mvc命名空間下,因此model binding/filter/routing等功能有所不同 最後,

Web API非常適合構建移動客戶端服務

 

WebService,WCF,WebApi區別與特點