WCF和ASP.NET Web API在應用上的選擇


在最近發布的Visual Studio 2012及.NET 4.5中, 微軟正式推出新的網絡服務框架ASP.NET Web API。作為ASP.NET MVC 4的一部分,ASP.NET Web API這套開源框架的設計目的是簡化RESTful服務的開發和使用。

ASP.NET Web API 與之前的內建HTTP服務解決方案的不同之處在於,它一開始就是圍繞HTTP協議及其消息語義構建起來的。與WCF REST或ASP.NET AJAX加ASMX相比,它不是對現有框架的增強,而是一個全新的平台。新的ASP.NET Web API的優勢在於它匯集了之前各平台的各種最佳特性,結合為一個全面而不臃腫的HTTP平台。

微軟已經有了一個的Web服務框架叫做Windows Communication Foundation( WCF),它利用TCP、HTTP、MSMQ等傳輸協議構建“契約先行”的服務。WCF最初為基於SOAP的服務而設計,首先支持的是WS-*功能,但后來添加了少量迎合REST的功能。在WCF 4.5也有很大的增強,具體可以看如下系列文章:

  1. What’s new in WCF 4.5? Let’s start with WCF configuration
  2. What’s new in WCF 4.5? A single WSDL file
  3. What’s new in WCF 4.5? Configuration tooltips and intellisense in config files
  4. What’s new in WCF 4.5? Configuration validations
  5. What’s new in WCF 4.5? Multiple authentication support on a single endpoint in IIS
  6. What’s new in WCF 4.5? Automatic HTTPS endpoint for IIS
  7. What’s new in WCF 4.5? BasicHttpsBinding
  8. What’s new in WCF 4.5? Changed default for ASP.NET compatibility mode
  9. What’s new in WCF 4.5? Improved streaming in IIS hosting
  10. What’s new in WCF 4.5? UDP transport support
  11. What’s new in WCF 4.5? WebSocket support (Part 1 of 2)
  12. What’s new in WCF 4.5? WebSocket support (Part 2 of 2)

隨着時間流逝,WCF Web API為了讓WCF適配到”原生”HTTP世界,遇到了很多困難。因為WCF主要是為基於SOAP的XML消息設計的,為了讓Web API成為WCF一部分,需要動的手術實在有點大(至少Web API的開發者們給了我這樣的印象),是基於RPC風格的API。另一方面,ASP.NET MVC的基礎設施既能優雅地處理HTTP請求和響應,又能輕松創建各種控制器,好像是創建這種新類型服務的合適途徑。

  • 支持URL路由,透過用戶熟悉的MVC風格路由語義,生成干凈的URL
  • 根據Accept標頭對請求和響應的序列化形式進行內容協商(Content Negotiation)
  • 支持大量輸出格式,包括JSON、XML、ATOM等
  • 默認對REST語義有完善支持,同時又不強制限定必須使用REST語義
  • 易於擴展的Formatter機制,支持添加新的輸入/輸出類型
  • 可通過HttpResponseMessage類、HttpRequestMessage類和強類型枚舉來描述大量的HTTP操作,提供對更高級的HTTP特性的深度支持
  • 基於慣例的設計引導用戶按HTTP Services的正確方式行事
  • Formatters和Filters延續了MVC的擴展模型,具備出色的擴展能力
  • 用於非Web程序時,可以脫離IIS運行(Self-hostable)
  • 具備可測試性,測試機制的設計類似於MVC

     現在我們擁有了2個服務框架,一個基於RPC機制的WCF和一個基於HTTP的ASP.NET Web Api。在我們的開發實踐中如何進行選擇呢? 可以參照知名互聯網企業,無論是google,facebook,baidu,新浪還是騰訊。他們對外開放的接口都是基於Http的Web API,在服務內部框架都是基於SOA架構設計的,通訊機制都是采用RPC機制的,例如Google Protocol Buffers ,Facebook thift。 我們完全也可以這樣搭配,在內部通訊采用WCF + Protobuf-NET,參看《WCF服務上應用protobuf》,對外的服務采用ASP.NET WEB API。WCF的 TCP、Named Pipes,甚至UDP(在WCF 4.5中)綁定的性能要比HTTP強很多倍,這里有一個幾年前的微軟的測試報告《WCF 性能基准報告》,對外提供的服務采用Web API同時也是一個業界標准問題,用WebAPI就很容易的跨越ios,android,wp等移動終端平台,同時有很成熟的OAuth 解決安全問題。

微軟隨.NET 4.5發布新REST API框架

Web API 強勢入門指南

Web API 入門指南 - 閑話安全


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM