WCF和ASP.NET Web API在應用上的選擇
在最近發(fā)布的Visual Studio 2012及.NET 4.5中, 微軟正式推出新的網(wǎng)絡(luò)服務框架ASP.NET Web API。作為ASP.NET MVC 4的一部分,ASP.NET Web API這套開源框架的設(shè)計目的是簡化RESTful服務的開發(fā)和使用。
ASP.NET Web API 與之前的內(nèi)建HTTP服務解決方案的不同之處在于,它一開始就是圍繞HTTP協(xié)議及其消息語義構(gòu)建起來的。與WCF REST或ASP.NET AJAX加ASMX相比,它不是對現(xiàn)有框架的增強,而是一個全新的平臺。新的ASP.NET Web API的優(yōu)勢在于它匯集了之前各平臺的各種最佳特性,結(jié)合為一個全面而不臃腫的HTTP平臺。
微軟已經(jīng)有了一個的Web服務框架叫做Windows Communication Foundation( WCF),它利用TCP、HTTP、MSMQ等傳輸協(xié)議構(gòu)建“契約先行”的服務。WCF最初為基于SOAP的服務而設(shè)計,首先支持的是WS-*功能,但后來添加了少量迎合REST的功能。在WCF 4.5也有很大的增強,具體可以看如下系列文章:
- What’s new in WCF 4.5? Let’s start with WCF configuration
- What’s new in WCF 4.5? A single WSDL file
- What’s new in WCF 4.5? Configuration tooltips and intellisense in config files
- What’s new in WCF 4.5? Configuration validations
- What’s new in WCF 4.5? Multiple authentication support on a single endpoint in IIS
- What’s new in WCF 4.5? Automatic HTTPS endpoint for IIS
- What’s new in WCF 4.5? BasicHttpsBinding
- What’s new in WCF 4.5? Changed default for ASP.NET compatibility mode
- What’s new in WCF 4.5? Improved streaming in IIS hosting
- What’s new in WCF 4.5? UDP transport support
- What’s new in WCF 4.5? WebSocket support (Part 1 of 2)
- What’s new in WCF 4.5? WebSocket support (Part 2 of 2)
隨著時間流逝,WCF Web API為了讓WCF適配到”原生”HTTP世界,遇到了很多困難。因為WCF主要是為基于SOAP的XML消息設(shè)計的,為了讓Web API成為WCF一部分,需要動的手術(shù)實在有點大(至少Web API的開發(fā)者們給了我這樣的印象),是基于RPC風格的API。另一方面,ASP.NET MVC的基礎(chǔ)設(shè)施既能優(yōu)雅地處理HTTP請求和響應,又能輕松創(chuàng)建各種控制器,好像是創(chuàng)建這種新類型服務的合適途徑。
- 支持URL路由,透過用戶熟悉的MVC風格路由語義,生成干凈的URL
- 根據(jù)Accept標頭對請求和響應的序列化形式進行內(nèi)容協(xié)商(Content Negotiation)
- 支持大量輸出格式,包括JSON、XML、ATOM等
- 默認對REST語義有完善支持,同時又不強制限定必須使用REST語義
- 易于擴展的Formatter機制,支持添加新的輸入/輸出類型
- 可通過HttpResponseMessage類、HttpRequestMessage類和強類型枚舉來描述大量的HTTP操作,提供對更高級的HTTP特性的深度支持
- 基于慣例的設(shè)計引導用戶按HTTP Services的正確方式行事
- Formatters和Filters延續(xù)了MVC的擴展模型,具備出色的擴展能力
- 用于非Web程序時,可以脫離IIS運行(Self-hostable)
- 具備可測試性,測試機制的設(shè)計類似于MVC
現(xiàn)在我們擁有了2個服務框架,一個基于RPC機制的WCF和一個基于HTTP的ASP.NET Web Api。在我們的開發(fā)實踐中如何進行選擇呢? 可以參照知名互聯(lián)網(wǎng)企業(yè),無論是google,facebook,baidu,新浪還是騰訊。他們對外開放的接口都是基于Http的Web API,在服務內(nèi)部框架都是基于SOA架構(gòu)設(shè)計的,通訊機制都是采用RPC機制的,例如Google Protocol Buffers ,F(xiàn)acebook thift。 我們完全也可以這樣搭配,在內(nèi)部通訊采用WCF + Protobuf-NET,參看《WCF服務上應用protobuf》,對外的服務采用ASP.NET WEB API。WCF的 TCP、Named Pipes,甚至UDP(在WCF 4.5中)綁定的性能要比HTTP強很多倍,這里有一個幾年前的微軟的測試報告《WCF 性能基準報告》,對外提供的服務采用Web API同時也是一個業(yè)界標準問題,用WebAPI就很容易的跨越ios,android,wp等移動終端平臺,同時有很成熟的OAuth 解決安全問題。
歡迎大家掃描下面二維碼成為我的客戶,扶你上云

浙公網(wǎng)安備 33010602011771號