WCF与ASP.NET Web API的比较


484

我花了几个月的时间试图掌握WCF的概念,最近我开发了我的第一个WCF服务应用程序。

为了理解配置文件中的所有设置,我付出了很多努力。
我不相信环境,但是似乎可以用它做很多令人惊奇的事情。

前几天,我发现Microsoft推出了一个名为ASP.NET Web API的新产品。

据我所知,它是一个RESTful框架,非常易于使用和实现。

现在,我试图找出这两个框架之间的主要区别,以及是否应该尝试使用新的API 转换旧的 WCF服务应用程序。

有人可以帮我理解它们的区别和用法吗?


12
+1有趣的问题。也许您会在programmers.stackexchange.com上
Mithir

1
您正在使用“旧” WCF的哪些功能?您是否要构建RESTful API?还是RPC,还是SOAP?
2012年

1
@marcind:感谢您的回答。主要是RESTful调用。完全没有RPC。
LeftyX '02


1
两者都是一回事,但是可能遇到的旧差异是wcf基本上是针对Intranet和Webapi的Internet,是的,我们当然也可以使wcf变得轻松!基本上两个都运行在http协议的web上
。http– LostCoder

Answers:


185

新的ASP.NET Web API是先前WCF Web API项目的延续(尽管某些概念已更改)。

WCF最初是为了启用基于SOAP的服务而创建的。对于更简单的RESTful或RPCish服务(例如jQuery之类的客户端),ASP.NET Web API应该是不错的选择。


36
另外:尽管WCF为编写REST风格的服务提供了一些支持,但是ASP.NET Web API中对REST的支持更加完善,将来所有REST功能的改进都将在ASP.NET Web API中进行 。msdn.microsoft.com/zh-我们/图书馆/jj823172.aspx
Ohad Schneider

6
实际上,WCF最初是为了在SOAP或RPC服务与客户端之间实现抽象层而创建的。关键是围绕这两个截然不同的调用创建一个单一体系结构(ABC),并通过配置文件处理管道。
Scott Marcus

4
ASP.NET Web API的真正缺点是它是客户端工具。Visual Studio支持集成的工具,以支持无缝的WCF服务客户端实体和服务生成。Web API不支持。我知道HttpClient其中有一个很棒的东西,但是它并不会处理实体生成和序列化/反序列化。
Shimmy Weitzhandler '17

1
@Shimmy使用招摇的服务生成怎么样?
Alex78191

1
@ Alex78191感谢您的回复。生成的实体可以发出INotifyPropertyChanged客户端实体吗?验证如何?
Shimmy Weitzhandler,

250

对于我们来说,WCF用于SOAP,而Web API用于REST。我也希望Web API也支持SOAP。我们没有使用WCF的高级功能。这是来自MSDN的比较:

在此处输入图片说明


1
Web API支持OData,这对于CSOM来说是天赐之物。
abbaf33f 2015年

12
令人惊讶的是,MS这么多东西说什么都不值得。例如,WCF支持JSON,但是此信息很好地隐藏在此“比较”中,而从文本上说,WebApi不仅支持JSON,而且支持两次。
magallanes

1
该表是没有意义的。“ JQuery”(大写的J的引号)是协议和/或格式?
hyankov

1
有趣。MSDN提到HTTP作为传输协议是错误的。HTTP是应用程序层协议。
RayLoveless

80

ASP.net Web API都是基于HTTP和REST的GET,POST,PUT,DELETE,具有众所周知的ASP.net MVC编程风格和JSON可返回性;Web API适用于所有轻量级进程和基于纯HTTP的组件。对于WCF而言,即使是简单或最简单的单个Web服务,它也将带来所有额外的负担。对于Ajax或动态调用的轻量级简单服务,WebApi始终可以满足您的需求。这巧妙地补充了ASP.net MVC或与之并行。

请查看播客:Hanselminutes播客264-这不是您父亲的WCF-有关 Scott API的更多信息,请参阅Scott Hanselman 撰写的有关Glenn Block的WebAPI


67

在下面列出的方案中,您应该使用WCF:

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

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

有太多不了解SOAP的客户端,例如浏览器,HTML5,在这种情况下,WEB API是一个不错的选择。

HTTP服务标头指定如何保​​护服务,如何缓存信息,消息正文的类型以及HTTP正文可以指定任何类型的内容,例如HTML,而不仅仅是XML作为SOAP服务。


7
这使得WCF仅处理SOAP消息这一假设是错误的假设。您也可以在WCF服务上公开REST端点。我将其修改为说,如果您不打算使用WCF的功能(请参阅tridy的消息),那么Web API是有意义的。
迈克(Mike)

3
是的,WCF确实也可以休息。.基本上,Web api是WCF功能的子集,如果您使用简单的CRUD样式的数据应用程序,则此API很合适。
user1496062

41

从现在开始使用两者以来,我发现WCF和Web API之间存在许多差异。两种技术堆栈都非常适合于不同的场景,因此不可能说哪个更好,这取决于配置和场景。

Properties              ASP.Net Web API                         WCF
--------------------------------------------------------------------------------------------------
End point (mainly)      Http based                              SOAP based
Service Type            Front End                               Back-end
Support                 caching, compression, versioning        No
Framework               ASP.net                                 WCF
Orientation             Resource Oriented                       Service Oriented
Transports              http                                    http, tcp, MSMQ, Named pipe
Message pattern         Request reply                           request Reply, one way, duplex
Configuration overhead  Less                                    Much
Security                lesser than WCF (web standard security) Very high (WS-I standard)
Hosting                 IIS                                     IIS, Windows Service, Self hosting
Performance             Fast                                    A bit slower than Web API
In use from             .NET 4.0                                .NET 3.5

注意:这些数据不仅是我的观点,也是从其他官方网站收集的。


12
Web Service API也可以自托管(Owin / Katana),也可以在Windows服务中
Monis Iqbal

-1表示使用图像而不是HTML构建表,因为这会阻止编辑答案以进行改进。
Ahsan Ahmed

34

WCF将为您提供很多便利,甚至无法与任何东西媲美。除非您想自己执行(仅举几例)身份验证,授权,加密,排队,限制,可靠的消息传递,日志记录,会话等。WCF不是[仅] Web服务;WCF是SOA的开发平台。


11
如果我没记错的话,我认为WEB API还提供了您列出的大多数功能。
亚历克斯(Alex)2015年

4
没有Web api不提供这些内容或提供非常简单的版本。
user1496062 2015年

3
嗯,这是什么-它是否提供?

5
有关身份验证和授权,请检查asp.net/web-api/overview/security/…。tl; dr:它在IIS中绝对支持它。对于加密,您可能需要使用SSL,ASP.NET自然会处理队列(但这是根据可用的工作线程与传入的请求来确定的)。存在会话(但我永远不建议直接使用会话)。日志很容易设置(通过ActionFilters等)。可靠消息传递的替代方法是使用SignalR(尽管不完全正确)。
James Haug,2015年

7
“没有什么可比的”?不太可能。
bbsimonbb '16

16

我为什么回答:

我花了大量时间来了解这两种技术之间的区别。我将所有这些观点放在这里,我认为“如果我在想寻找答案的时候想知道这些观点,那么我已经很早决定选择我所需的技术了。”

信息来源:

Microsoft®VisualStudio®2015发布

ISBN-13:978-0-672-33736-9 ISBN-10:0-672-33736-3

为什么选择ASP.NET Web API和WCF:

在比较ASP.NET Web API和WCF的技术之前,重要的是要了解创建Web服务实际上有两种样式/标准:REST(表示状态传输)和SOAP / WSDL。SOAP / WSDL是构建Web服务的原始标准。但是,它很难使用,并且具有笨拙的消息格式(例如XML),从而降低了性能。基于REST的服务迅速成为替代方案。它们更易于编写,因为它们利用了HTTP的基本结构(GET,POST,PUT,DELETE),并且通常使用较小的消息格式(如JSON)。因此,基于REST的HTTP服务现已成为编写严格针对Web的服务的标准。

让我们定义ASP.NET Web API的目的

ASP.NET Web API是Microsoft开发基于REST的HTTP Web服务的技术。(很早以前,它取代了基于SOAP / WSDL的Microsoft的ASMX。)Web API使基于所有浏览器和本机设备都能理解的HTTP协议的健壮服务编写变得容易。这使您能够创建服务来支持您的应用程序,并从其他Web应用程序,平板电脑,手机,PC和游戏机中调用它们。今天编写的大多数利用现有Web连接编写的应用程序都以某种方式使用HTTP服务。

现在让我们定义WCF的目的:

跨Internet通信并不总是最有效的方法。例如,如果客户端和服务都存在于同一技术(甚至同一台机器)上,则它们通常可以协商更有效的通信方式(例如TCP / IP)。服务开发人员发现自己做出了他们试图避免的选择。他们现在必须在创建有效的内部服务与能够通过Internet找到广泛访问之间进行选择。而且,如果他们必须同时支持这两种服务,则他们可能必须创建其服务的多个版本,或者至少创建单独的代理来访问其服务。这是Microsoft使用WCF解决的问题

使用WCF,您可以创建服务而不必担心边界。然后,您可以让WCF担心以最有效的方式运行服务,具体取决于调用客户端。为了管理此任务,WCF使用端点的概念。您的服务可能具有多个端点(在设计时或部署后配置)。每个端点都指示该服务如何支持呼叫客户端:通过Web,通过远程处理,通过Microsoft消息队列(MSMQ)等。WCF使您可以专注于创建服务功能。它担心如何最有效地与主叫客户通话。这样,单个WCF服务可以有效地支持许多不同的客户端类型。

WCF示例:

考虑示例:

客户数据在应用程序之间共享。每个应用程序可能在不同的平台上编写,并且可能存在于不同的位置。您可以将客户界面提取到WCF服务中,该服务提供对共享客户数据的通用访问。这样可以集中数据,减少重复,消除同步并简化管理。另外,通过使用WCF,您可以配置服务终结点以使其对调用客户端有意义的方式工作。该图显示了以前的示例,其中集中地访问WCF服务中的客户数据。

这就是WCF为不同客户提供服务的方式

结论:

i)何时选择Web API:

不可否认,像使用ASP.NET Web API创建的基于REST的HTTP服务已成为构建Web服务的标准。这些服务为Web开发人员构建服务提供了一种简单明了的方法。Web开发人员了解HTTP GET和POST,因此可以很好地适应这些类型的服务。因此,如果要编写严格针对HTTP的服务,则ASP.NET Web API是合理的选择。

ii)何时选择WCF:

当您需要基于不同的协议和消息格式支持多个服务端点时,WCF技术很有用。像Microsoft BizTalk这样的产品利用WCF来创建健壮的服务,这些服务可以通过不同的机器到机器配置在Web上使用。但是,如果您确实需要编写一个在连接到本地时通过TCP / IP进行通信的应用程序网络,并且在网络之外时通过HTTP工作,WCF是您的答案

被警告:

Web开发人员经常将WCF视为开发起来更加困难和复杂。因此,如果您不希望使用多协议服务,则可能会坚持使用ASP.NET Web API。


1
请不要对多个问题添加相同的答案。一旦赢得足够的声誉,就回答最好的一个,并将其余的标记为重复。如果不是重复的内容,则根据问题定制帖子,并标记为不删除。
巴尔加夫饶

12

MSDN上对此有一个比较

WCF和ASP.NET Web API

对我而言,选择是关于客户是谁,客户在哪里?

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

在公司网络外部,并使用各种技术,例如PHP,Python等:将Web API与REST一起使用


9

从业务来讲,WebApi缺少WSDL,因此开发人员应手动记录所有内容。并且,例如,如果WebApi操作返回对象列表,则客户端应手动创建对象,即WebAPI确实容易出现定义错误。

Webapi的优点是比WCF轻巧。


3
WCF == WS- *,webapi == REST
BozoJoe

7

关于“ WebApi缺少WSDL”的陈述,有几种生成Rest客户的方法。一种流行的方法是Swagger UI /(Swashbukkle Nuget)。这提供了一个丰富的界面来了解REST端点的输入和输出模式,以及用于测试端点的在线工具。

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


1

使用wcf,我们可以为tcp,http等多个端点配置和公开相同的服务支持。如果您希望服务仅基于http,则最好使用Web API。与wcf相比,Web API的配置要少得多,并且比wcf快一些。Wcf还支持Restful服务。如果您有.Net framework 3.5的限制,那么您的选择是wcf。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.