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 { getset; }
    [DataMember]
    public string Name { getset; }
    // 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 解决安全问题。

选择Web API还是WCF的更多相关文章

  1. ASP.NET Web API——选择Web API还是WCF

    WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考 ...

  2. WCF、Web API、WCF REST、Web Service比较

    原文地址:http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and- ...

  3. Web API、WCF和Web Service的区别

    [转载] Web Service 1.它是基于SOAP协议的,数据格式是XML 2.只支持HTTP协议 3.它不是开源的,但可以被任意一个了解XML的人使用 4.它只能部署在IIS上 WCF 1.这个 ...

  4. Difference between WCF and Web API and WCF REST and Web Service

    The .Net framework has a number of technologies that allow you to create HTTP services such as Web S ...

  5. WCF 、Web API 、 WCF REST 和 Web Service 的区别

    WCF .Web API . WCF REST 和 Web Service 的区别 The .Net framework has a number of technologies that allow ...

  6. [Solution] 使用Autofac在MVC、Web API、WCF中实现IOC

    本来想聊一下面试过程的,1个星期面了6家,4家当场给offer,2家技术通过(1家没下文,1家复试).从中也学习到一些东西,先还是继续Coding吧. 官网:http://autofac.org/ 下 ...

  7. Web API 和 WCF 的比较

    现在有很多可用的技术允许你创建被不同客户端所消费的服务,这些客户端可能是Web应用程序.Windows应用程序和移动应用等.服务可以支持http协议或者其他协议.接下来的讨论仅限于ASP.NET We ...

  8. 转 Difference between WCF and Web API and WCF REST and Web Service

    http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-R ...

  9. WCF、Web API、WCF REST、Web Service

    WCF.Web API.WCF REST.Web Service 区别 Web Service It is based on SOAP and return data in XML form. It ...

随机推荐

  1. POJ 3903 Stock Exchange

    Stock Exchange Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2954   Accepted: 1082 De ...

  2. cwRsync window下的跨服务器的文件同步

    cwRsync 是window下的文件同步软件,可以跨服务器运行,第一次运行的时候是全部备份同步,之后的同步采用的是增量同步 这个软件分为服务端和客户端. 服务器是需要同步的文件源, 客户端相当于是备 ...

  3. safenet 超级狗 java调用 小计

    最近使用safenet 的 超级狗 在调用api的时候遇到了一些小问题记录一下. 首先safeNetdemo中的api是针对demo的 不能用于部署使用 ,真正用户部署使用的是在用工具包,超级狗开发商 ...

  4. 关于同一台机器上安装多个sql实例的连接方法

    由于客户需要在一台服务器上安装了两个sql服务器(一个sql2000,一个是sql2005,其实例名不同),默认的端口1433被先安装的sql2000使用,后来安装的的随机启用了一个3045端口.其中 ...

  5. Python 之 MySQL 操作库 lazy_mysql

    TOC Intro Installation Tutorial API Engine Pool Column Table Intro lazy_mysql 是一个非常简单易用,用来操作 MySQL 的 ...

  6. php分享三十四:待排查问题

    1:内存设为1M时,代码不执行,也不报错 ini_set('display_error', 1); error_reporting(E_ALL); ini_set('memory_limit', 10 ...

  7. Communication - 02.Call U

    App层 从大拇哥Click CallButton开始手机便已明白,主人这是要打电话.当然,你可以选择直接拨号,也可以通过ContactList,或者从通话记录着手.这些都只是UI的设计不同而已,终归 ...

  8. SQL语句技巧之去除重复行

    去除表中重复行数据,可能大家立马就想到的是用DISINTCT关键字,但DISINTCT只能是去除表中所有列都相同的行,若碰到需要去除表中多个字段重复的行(即:部份相同,部份不相同),那么该如何做呢?我 ...

  9. BZOJ1015 并查集

    1015: [JSOI2008]星球大战star war Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了 ...

  10. POI中getLastRowNum() 和getLastCellNum()的区别 hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1

    hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1