選擇Web API還是WCF


ASP.NET

WCF是.NET平台服務開發的一站式框架,那么為什么還要有ASP.NET Web API呢?簡單來說,ASP.NET Web API的設計和構建只考慮了一件事情,那就是HTTP,而WCF的設計主要是考慮SOAP和WS-*。

WCF已經出現好多年了,相對來說ASP.NET Web API還是個小孩子,但是不意味着ASP.NET Web API要代替WCF,在不同的場合,它們各有長處。ASP.NET Web API非常輕量,在功能和靈活性上都不能和WCF相比。如果你的服務是基於TCP的,或者支持更多的傳輸機制,那么WCF是最好的選擇。然而,不是所有的平台都支持SOAP和WS-*,當客戶端不支持這些協議的時候,ASP.NET Web API就更勝一籌了。

讓我們通過一個例子看一下兩種編程模型的不同:一個根據雇員ID獲取公司雇員的服務。WCF代碼如1-1,ASP.NET Web API代碼如1-2

1-1 WCF方式獲取雇員信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[ServiceContract]
public interface IEmployeeService
{
     [OperationContract]
     [WebGet(UriTemplate =  "/Employees/{id}" )]
     Employee GetEmployee( string id);
}
public class EmployeeService : IEmployeeService
{
     public Employee GetEmployee( string id)
     {
         return new Employee() { Id = id, Name =  "John Q Human" };
     }
}
 
[DataContract]
public class Employee
{
     [DataMember]
     public int Id {  get set ; }
     [DataMember]
     public string Name {  get set ; }
     // other members
}

1-2 ASP.NET Web API方式獲取雇員信息

1
2
3
4
5
6
7
public class EmployeeController : ApiController
{
     public Employee Get( string id)
     {
         return new Employee() { Id = id, Name =  "John Q Human" };
     }
}

這里值得注意的是:ASP.NET Web API和MVC非常像,除了它繼承自ApiController。MVC的一些特性如:綁定和可測試性等對ASP.NET Web API都是可用的。

適合ASP.NET Web API使用的場景:

  • 富客戶端web應用程序:ASP.NET Web API適合大量使用AJAX調用的富客戶端應用程序,如Silverlight應用程序,基於Adobe Flash的應用程序或單頁應用程序(SPA)等。
  • 本地移動和非移動程序:移動設備不支持SOAP,然而ASP.NET Web API可以作為運行在移動設備上的本地程序的后端。
  • 物聯網平台(IOT):使用以太網控制器或GSM貓的IOT設備可以通過HTTP和ASP.NET Web API服務會話。不僅僅是IOT設備,其他支持HTTP的設備,例如RFID讀寫器都可以和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 解決安全問題。


免責聲明!

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



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