WCF与ASP.NET Web API

Lef*_*tyX 478 c# wcf asp.net-web-api

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

我很难理解配置文件中的所有设置.
我不相信环境,但似乎你可以用它做出惊人的东西.

前几天我发现微软已经推出了一款名为ASP.NET Web API的新产品.

我可以阅读它是一个RESTful框架,非常易于使用和实现.

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

有人可以帮我理解每个的差异和用法吗?

Man*_*ain 248

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

在此输入图像描述

  • 令人惊讶的是,如此多的MS说没有什么值得的.例如,WCF支持JSON,但是这个信息在这个"比较"中被很好地隐藏了,而它在文本上说WebApi不是一次而是两次支持JSON. (11认同)

mar*_*ind 181

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

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

  • 另外:*虽然WCF为编写REST样式的服务提供了一些支持,但ASP.NET Web API中对REST的支持更加完善,所有未来的REST功能都将在ASP.NET Web API*http:// msdn中进行. microsoft.com/en-us/library/jj823172.aspx (34认同)
  • 实际上,WCF最初是为了在SOAP或RPC服务与客户端之间实现抽象层而创建的.关键在于围绕这些非常不同的调用创建单一架构(ABC),并通过配置文件处理管道. (6认同)
  • ASP.NET Web API的真正缺点是它的客户端工具.Visual Studio支持集成工具,以支持无缝WCF服务客户端实体和服务生成.Web API中不支持.我知道有一个很棒的`HttpClient`,但是它没有关注实体生成和序列化/反序列化. (4认同)
  • @Shimmy 使用 swagger 生成服务怎么样? (2认同)
  • @Alex78191 感谢您的回复。生成的实体可以发出“INotifyPropertyChanged”客户端实体吗?验证怎么样? (2认同)

Nav*_*jay 80

ASP.net Web API是基于HTTP和REST的GET,POST,PUT,DELETE,具有众所周知的ASP.net MVC编程风格和JSON可返回性; web API适用于所有轻量级进程和基于纯HTTP的组件.对于即使是简单或最简单的单一Web服务也可以继续使用WCF,它将带来所有额外的行李.对于ajax或动态调用的轻量级简单服务,WebApi总能满足需求.这与ASP.net MVC并行地完美补充或有所帮助.

看看播客:Hanselminutes Podcast 264 - 这不是你父亲的WCF - 有关更多信息,请参阅Scott Hanselman 与Glenn Block的WebAPI.


小智 66

在下面列出的场景中,您应该选择WCF:

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

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

有很多客户端不理解像浏览器,HTML5这样的SOAP,在这些情况下,WEB API是一个不错的选择.

HTTP服务标头指定如何保​​护服务,如何缓存信息,消息体的类型和HTTP主体可以指定任何类型的内容,如HTML,而不仅仅是XML作为SOAP服务.

  • 这假设WCF只处理SOAP消息,这是一个不正确的假设.您也可以在WCF服务上公开REST端点.我会修改它说,如果你不打算使用WCF的功能(参见tridy的消息),那么Web API是有意义的. (7认同)
  • 是的WCF也做Rest.基本上,Web api是WCF功能的一个子集,如果你做简单的CRUD风格的数据应用,它是合适的. (3认同)

Raj*_*put 40

自从使用到现在为止,我发现WCF和Web API之间存在很多差异.两种技术都适用于不同的场景.所以不可能说哪个更好,这取决于配置和方案.

请参阅此图片以了解更多不同之处

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

  • Web Service API也可以是自托管(Owin/Katana)以及Windows服务 (11认同)

tri*_*idy 34

WCF将为您提供如此多的开箱即用,它甚至无法与任何东西相提并论.除非您想要自己实现(仅举几例)身份验证,授权,加密,排队,限制,可靠消息传递,日志记录,会话等.WCF不是[仅] Web服务; WCF是SOA的开发平台.

  • 如果我没弄错的话,我认为WEB API也提供了你列出的大部分功能. (11认同)
  • "无法与任何东西相比"?不太可能. (7认同)
  • 有关身份验证和授权,请查看http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api.tl; dr:它在IIS中肯定支持它.对于加密,您可能需要使用SSL,ASP.NET自然会处理排队(但这是根据可用的工作线程与传入请求直接进行).会话存在(但我从不建议直接使用Sessions).记录很容易设置(通过ActionFilters等).可靠消息传递的替代方案是使用SignalR(尽管不完全正确). (5认同)
  • 没有Web api不提供这些东西或提供非常简单的版本. (4认同)
  • 那是什么 - 它是否提供了它们? (3认同)

Wiq*_*iqi 14

我为什么回答:

我花了很多时间来理解这两种技术之间的区别.我会把所有这些观点放在这里我认为"如果我在寻找这个答案的时候想到了这些点,那么我早就决定选择我所需要的技术了."

信息来源:

Microsoft®VisualStudio®2015Unleashed

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(Representational State Transfer)和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的目的:

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

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

WCF示例:

考虑这个例子:

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

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

结论:

i)何时选择Web API:

无可否认,基于REST的HTTP服务(如使用ASP.NET Web API创建的服务)已成为构建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.


小智 12

在MSDN上对此进行了比较

WCF和ASP.NET Web API

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

在公司内部基于网络和.NET的客户端:使用带有TCP绑定的WCF(快速通信而不是HTTP)

在公司网络之外,使用PHP,Python等各种技术:使用带有REST的Web API


mag*_*nes 9

业务来讲,WebApi缺乏WSDL,因此开发人员应该手动记录所有文档.例如,如果WebApi操作返回对象列表,那么客户端应该手动创建对象,即WebAPI确实容易出现定义错误.

Webapi的专业版比WCF更轻量级.

  • WCF == WS- *,webapi == REST (3认同)

Ven*_*ndi 7

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

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