WCF vs ASP.NET Web API

我花了几个月的时间来掌握WCF背后的概念,最近我开发了我的第一个WCF服务应用程序。
我已经努力了解configuration文件中的所有设置。
我不相信环境,但似乎你可以用它做出惊人的东西。
有一天,我发现微软已经出来了一个叫ASP.NET Web API的新东西。
对于我所能读的这是一个RESTful框架 ,非常容易使用和实现。
现在,我想弄清楚两个框架之间的主要区别是什么,如果我应该尝试使用新的API转换旧的 WCF服务应用程序。

请有人能帮我理解每一个的差异和用法吗?

新的ASP.NET Web API是以前的WCF Web API项目的延续(尽pipe一些概念已经改变 )。

WCF最初是为了启用基于SOAP的服务而创build的。 对于更简单的RESTful或RPCish服务(认为像jQuery的客户端)ASP.NET Web API应该是不错的select。

对我们而言,WCF用于REST的SOAP和Web API。 我也希望Web API支持SOAP。 我们没有使用WCF的高级function。 这里是从MSDN比较:

在这里输入图像描述

ASP.net Web API全部是基于HTTP和REST的基于GET,POST,PUT,DELETE的,具有很好的ASP.net MVC风格的编程和JSON可返回的; web API适用于所有轻量级stream程和基于纯HTTP的组件。 对于一个简单或最简单的单一Web服务,即使是WCF也将带来所有额外的行李。 对于轻量级的简单服务Ajax或dynamic调用总是WebApi只是解决了需要。 这个整齐的补充或帮助与ASP.net MVC平行。

查看播客:Hanselminutes Podcast 264 – 这不是你父亲的WCF – 所有关于与 Scott Hanselman的Glenn Block的WebAPI的更多信息。

在下面列出的情况下,你应该去WCF:

  1. 如果您需要发送TCP,MSMQ或MIME等协议的数据
  2. 如果消费客户端只知道如何使用SOAP消息

WEB API是开发RESTful / HTTP服务的框架。

有很多客户不理解像浏览器这样的SOAP,HTML5,在这种情况下,Web API是一个不错的select。

HTTP服务头指定了如何保护服务,如何caching信息,消息体的types和HTTP体可以指定任何types的内容,如HTML,而不仅仅是XML服务。

WCF会给你这么多的东西,甚至没有任何东西可比。 除非你想自己执行(仅举几个例子)身份validation,授权,encryption,排队,限制,可靠的消息传递,日志logging,会话等。 WCF不是[只]networking服务; WCF是SOA的开发平台。

自从使用到现在为止,我发现了WCF和WEB Api之间的许多不同之处。两种技术在不同的场景中都能很好地匹配,所以不可能说哪个更好,这取决于configuration和场景。

看到这个图像了解更多的差异

注意:这个数据不仅是我的这个视图,也是从其他官方网站收集的。

在业务方面,WebApi缺乏WSDL,因此开发者应该手动logging所有的信息。 例如,如果WebApi操作返回对象列表,则客户端应手动创build对象,即WebAPI确实容易出现定义错误。

Webapi的专家是比WCF更轻量级的。

有关于此的MSDN比较

WCF和ASP.NET Web API

对我来说,select是关于谁是客户,他们在哪里?

在公司基于networking和.NET的客户端中:使用WCF和TCP绑定(比HTTP更快的通信)

在公司networking之外,使用诸如PHP,Python等多种技术 :使用Web API和REST

关于“WebApi缺lessWSDL”的说法,有几种方法可以生成Rest客户端。 一个stream行的方法是Swagger UI /(Swashbukkle Nuget)。 这提供了一个丰富的界面来理解REST端点的input输出模式和在线工具来testing端点。

JSON LD(Json链接文档)是另一个新兴的标准,它将通过更好的语义暴露JSON模式来进一步改进基于JSON的REST开发人员体验。

使用wcf,我们可以configuration和公开多个端点(如tcp,http.if)的相同服务支持。如果您希望您的服务仅基于http,那么使用web API将会更好。 与wcf相比,Web API的configuration非常less,比wcf要快一些。 Wcf也支持平安的服务。 如果你有.net framework 3.5的限制,那么你的select是wcf。

ASP.NET Web API vs WCF:

ASP.NET Web API: ASP.NET Web API

Web API:

  • 开源并与.NET框架。
  • 仅支持HTTP协议。
  • 将http动词映射到方法
  • 使用类似于ASP.NET MVC的路由和控制器概念。
  • 不支持可靠消息传递和交易。
  • Web API可以使用HttpConfiguration类configuration,但不能在web.config中configuration。
  • 构buildRESTful服务的理想select。

WCF:

  • 使用基于属性的编程模型。
  • 使用服务,操作和数据合同。
  • 支持可靠的消息和事务。
  • 运用.NET框架
  • 支持HTTP,TCP,UDP和自定义传输协议。
  • 使用web.config和属性来configuration服务。
  • 支持RESTful服务,但有限制。

何时selectWCF?

  • 如果您使用.NET Framework 3.5,请selectWCF。 Web API不支持.NET 3.5或更低版本。
  • 如果您的服务需要支持HTTP,TCP,命名pipe道等多种协议,请selectWCF。
  • 如果要使用可靠消息传递,事务,消息安全等WS- *标准构build服务,请selectWCF。
  • 如果要使用请求回复,单向和双向消息交换模式,请selectWCF。

何时selectASP.NET Web API?

  • 如果您使用.NET Framework 4.0或更高版本,请selectWeb API。
  • 如果要构build仅支持HTTP协议的服务,请selectWeb API。
  • selectWeb API来构build基于RESTful HTTP的服务。
  • 如果您熟悉ASP.NET MVC,请selectWeb API。