WCF vs ASP。NET Web API

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

我已经努力理解了配置文件中的所有设置 我不相信环境,但似乎你可以用它做惊人的事情。< / p >

前几天我发现微软推出了一个名为ASP。NET Web API的新东西。

据我所知,它是一个宁静的框架,非常容易使用和实现。

现在,我试图弄清楚这两个框架之间的主要区别是什么,如果我应该尝试用新的API转换我的 WCF服务应用程序。

有人能帮我了解一下这两种语言的区别和用法吗?

224643 次浏览

新的ASP。NET Web API是以前的WCF Web API项目的延续(尽管有一些观念发生了变化)。

最初创建WCF是为了启用基于soap的服务。对于更简单的RESTful或rpish服务(考虑jQuery这样的客户端)。NET Web API应该是一个很好的选择。

ASP.net Web API是基于HTTP和REST的GET,POST,PUT,DELETE,熟悉ASP.net MVC风格的编程和JSON可返回;web API适用于所有轻量级进程和纯基于HTTP的组件。对于使用WCF的人来说,即使是简单或最简单的单个web服务,它也会带来所有额外的负担。对于ajax或动态调用的轻量级简单服务,WebApi总是能解决这一需求。这是对ASP.net MVC的补充或帮助。

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

在下面列出的场景中,你应该使用WCF:

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

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

有很多客户端不理解SOAP,比如浏览器,HTML5,在这些情况下,WEB api是一个很好的选择。

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

对我们来说,WCF用于SOAP, Web API用于REST。我希望Web API也支持SOAP。我们没有使用WCF的高级特性。下面是来自MSDN的比较:

enter image description here

WCF会给你很多开箱即用的东西,它甚至是任何东西都无法比拟的。除非您想自己实现(举几个例子)身份验证、授权、加密、排队、节流、可靠消息传递、日志记录、会话等等。WCF不仅仅是web服务;WCF是面向SOA的开发平台。

从业务角度讲,WebApi缺少WSDL,因此开发人员应该手动编写文档。如果,例如,WebApi操作返回一个对象列表,那么客户端应该手动创建对象,也就是说,WebApi确实容易出现定义错误。

Webapi的优点是它比WCF更轻量级。

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

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

从使用WCF到现在,我发现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

注:数据不只是个人观点,也有其他官方网站的数据。

在MSDN上有一个比较

WCF和ASP。NET Web API

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

在公司网络和基于。net的客户中:使用WCF与TCP绑定(比HTTP通信快)

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

我为什么要回答:

我花了大量的时间来理解这两种技术之间的区别。我把所有这些点都写在这里,我认为“如果我在四处寻找答案的时候就有了这些点,那么我就会更早地决定选择我需要的技术。”

资料来源:

Microsoft®Visual Studio®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是微软用于开发基于rest的HTTP Web服务的技术。(它很久以前就取代了微软的基于SOAP/WSDL的ASMX。)Web API使得基于所有浏览器和本机设备都能理解的HTTP协议编写健壮的服务变得很容易。这使您能够创建服务来支持您的应用程序,并从其他web应用程序、平板电脑、移动电话、pc和游戏控制台调用它们。目前为利用Web连接而编写的大多数应用程序都以某种方式使用HTTP服务。

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

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

使用WCF,您可以无需考虑边界就可以创建服务。然后,您可以让WCF负责以最有效的方式运行您的服务,这取决于调用客户端。为了管理这个任务,WCF使用了端点的概念。您的服务可能有多个端点(在设计时或部署后配置)。每个端点表示服务如何支持调用客户机:通过Web、通过远程处理、通过Microsoft Message Queuing (MSMQ)等等。WCF使您能够专注于创建服务功能。它担心如何最有效地与打电话的客户交谈。通过这种方式,单个WCF服务可以有效地支持许多不同的客户端类型。

WCF示例:

请看下面的例子:

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

This is how 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。

使用wcf,我们可以为多个端点(如tcp、http)配置和公开相同的服务支持。如果你想让你的服务只基于http,那么最好使用web API。与wcf相比,Web API的配置非常少,比wcf快一点。Wcf还支持restful服务。如果你有。net framework 3.5的限制,那么你可以选择wcf。