ASP.NET Web API系列——选择Web API还是WCF
2016-07-14 11:04
525 查看
http://www.nmtree.net/2014/10/19/asp-net-web-api-series-choosing-asp-net-web-api-or-wcf.html
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 ASP.NET Web API方式获取雇员信息
这里值得注意的是: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 解决安全问题。
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方式获取雇员信息
适合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 解决安全问题。
相关文章推荐
- 在 ASP.NET MVC 项目中使用 WebForm
- asp.net webapi 自托管插件式服务
- 关于.NET、ASP.NET、C#、WinFrom、MVC以及WebForm的简单描述
- ASP.NET里面,如果设置了form的 onsubmit="return false;"之后,就不能提交按钮了?
- Asp.net mvc 自定义全局的错误事件HandleErrorAttribute无效
- ASP.NET中函数返回多个值的方法
- Asp.Net生成RSS方法
- ASP.NET中POST提交数据并跳转页面
- ASP.NET MVC实现多个按钮提交事件
- Asp.Net时间戳与时间互转
- Asp.Net微信登录-电脑版扫描二维码登录
- Asp.net正则获取html内容
- Asp.Net读写XML简单方法
- Asp.Net多线程用法1
- Asp.Net操作FTP方法
- ASP.NET 共用类库1
- ASP.NET MVC从客户端中检测到有潜在危险的 Request.Form 值
- Asp.Net MVC EF各版本区别
- Asp.Net IEnumerable,ICollection,IList,List区别
- Asp.Net MVC Filter权限过滤使用说明