ASP.NET Web API系列——选择Web API还是WCF
来源:互联网 发布:keep软件官方下载 编辑:程序博客网 时间:2024/06/06 23:02
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方式获取雇员信息
[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方式获取雇员信息
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 解决安全问题。
- ASP.NET Web API系列——选择Web API还是WCF
- 【Web API系列教程】2.2 — ASP.NET Web API中的路由和动作选择机制
- WCF和ASP.NET Web API
- 【Web API系列教程】1.1 — ASP.NET Web API入门
- 【Web API系列教程】2.1 — ASP.NET Web API中的路由机制
- 【Web API系列教程】2.3 — ASP.NET Web API 2中的属性路由
- 第11章 ASP.NET Web API(WCF宿主+Web API、OWIN宿主+Web API)
- ASP.NET Web API 框架系列文
- ASP.NET Web API系列教程目录
- asp.net web api
- ASP.NET Web API
- asp.net web api
- asp.net web api
- asp.net web api
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【三】——Web Api入门
- ASP.NET Web API中的Http请求路由选择
- 实战 ASP.NET Web API
- ASP.NET Web Api 教程
- python的模块导入
- 长文干货!走近人脸检测:从VJ到深度学习(下)
- spring -boot 搭建学习
- Activiti基础教程--01(简介、代码生成Activiti的25张表、Activiti配置文件activiti.cfg.xml生成25张表、在Eclipse上安装Activiti插件)
- 经典SQL语句
- ASP.NET Web API系列——选择Web API还是WCF
- 363. Max Sum of Rectangle No Larger Than K
- 手势(由不理解drag和swipe引发的)
- iOS8新特性--WKWebView详解
- 【Android】android studio一键生成快速开发实现语言国际化
- 判断两个数相等(坑点)
- 在linux 64位下安装JDK
- Eclipse中的项目导入到Studio中,保留原签名
- on error resume next用法