关于WCF、WebAPI、WebService之间的区别总结 分布式通信技术
早在1996年Gartner就前瞻性地提出了面向服務架構的思想(SOA),SOA 的走紅在很大程度上歸功于 Web Service 標準的成熟和應用的普及。
Service Oriented Ambiguity 中文一般理解為:面向服務架構,簡稱SOA,這個概念算得上微服務的鼻祖了。
SOA 的提出是在企業計算領域,就是要將緊耦合的系統,劃分為面向業務的、粗粒度、松耦合、無狀態的服務。服務發布出來供其他服務調用,一組互相依賴的服務就構成了SOA架構下的系統。
SOA 本質上是服務的集合。
在分布式通信技術選型中,就本人曾經使用過的基于微軟平臺的分布式通信進行概述,先明確一下分布式框架的三個基本需求:
客戶端:Web、Android、IOS、跨平臺(Java 開發的系統和.NET 開發的系統可以通信)
服務端:部署在Windows、Linux
合約(Contract):傳遞的格式(REST,Json、SOAP、XML)、通信協議(HTTP、XML-RPC、TCP)、消息超時設置、消息包大小
要打造分布式平臺,各家技術棧多有不錯的實踐,這里重點說一下微軟技術棧下,豐富的技術選型:
.NET Remoting (15年前技術,目前已經失傳)
Web Service (ASMX, ASP .NET Web Services,15年前技術,維護項目依然存在)
WCF (Windows Communication Foundation,10年前技術,維護項目中比較多)
Web API (5年前技術開始火起來,和跨平臺需求密不可分,最近3年的新需求大部分遷移在這里了)
下面展開來說:
.NET Remoting
是2.0時代的產物, 即2004年的技術,我還沒有機會實戰過。在微軟Roadmap中已被WCF取代(.NET Remoting做得到的事,理論上WCF都可以實現) 依據微軟一份,WCF在效能上比ASP.NET Web Service快了25%-50%,比.NETRemoting快25%,棄.NET Remoting改用WCF將有性能能上的突破。詳見報告鏈接。
Web Service
在很早前開發WebForm ASP.NET中用的比較多,因此可以將 Web Service 理解為一個基于 HTTP 協議開發的上層應用程序
Web service 是一個平臺獨立的,低耦合的,自包含的、基于可編程的 Web 的應用程序,可使用開放的 XML(標準通用標記語言下的一個子集)標準來描述、發布、發現、協調和配置這些應用程序,用于開發分布式的互操作的應用程序。Simple Object Access Protocol,中文為簡單對象訪問協議,簡稱 SOAP。
1、它是基于SOAP協議的,數據格式是XML (SOAP )2、只支持HTTP協議3、它不是開源的,但可以被任意一個了解XML的人使用4、它只能部署在IIS上SOA 不是 Web Service,Web Service 是當年最適合實現SOA的技術。
WCF
WCF是取代Web Service及.NET Remoting的接班人,我記得這個是微軟2010年開始力推的技術。
我第一次是用WCF是2012年,做一個電信級項目,結合微軟吹水的Silverlight技術(Silverlight技術,2013年底該技術被微軟安樂死了,again!)
1、這個也是基于SOAP的,數據格式是XML2、這個是Web Service(ASMX)的進化版,可以支持各種各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.3、WCF的主要問題是,它配置起來特別的繁瑣!!!(此處特別強調了3個感嘆號 )4、它不是開源的,但可以被任意一個了解XML的人使用5、它可以部署應用程序中或者IIS上或者Windows服務中WCF門檻有些太高,僅僅在Windows平臺開發,而且配置文件比較復雜(WCF 客戶端\WCF 服務器端,僅Binding、Behavior的復雜度就能單獨寫一篇文章,踩過不少坑,都是淚。)
眾所周知,微軟.net技術未來是.netCore,成熟的.NetCore3 2019年底就可以應用于生產系統了, 但多年來微軟一直拒絕將WCF 的服務器端移植到.NET Core, 導致這個分布式技術,面臨的極大的技術瓶頸,即若干年后幾無可用人才來維護WCF項目,所以大約3年前開始,我知道周圍朋友公司的新項目大都避而不談WCF了。
隨著SOAP 逐漸淡出,RESTful大行其道, Web API火了起來。
微軟技術棧的工程實現是 ASP.NET Web API,而且微軟建議使用 ASP.NET Core Web API 或 gRPC,它們提供基于跨平臺和跨編程語言的 RPC,也能使用 gRPC 來編寫代碼,并替換掉一些 WCF 服務器服務。
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,而且微軟2014年推出開源.NetCore中就有ASP.Net Core Web API,可見重視程度。
分布式技術這么多,我該選誰?
都2019年了,新項目肯定是WebAPI,原因如下:
WebAPI只要有能力發送HTTP Request跟解析JSON,比較符合微服務要求, 跨平臺支持。創建一個基于HTTP的面向資源的服務并且可以使用HTTP的全部特征時(比如URIs、request/response頭,緩存,版本控制,多種內容格式),你應該選擇WebAPI讓你的服務用于瀏覽器、手機、iPhone和平板電腦時,你應該選擇Web API雙工消息模式,過SignalR和WebSockets整合(創建一個支持消息、消息隊列、雙工通信的服務時)原文鏈接:https://www.jianshu.com/p/54192c6df483
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的关于WCF、WebAPI、WebService之间的区别总结 分布式通信技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 alpine 中使用 NPOI
- 下一篇: Azure 物联网开发者体验 7 月更新