499

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

我很难理解配置文件中的所有设置。
我不相信环境,但似乎你可以用它做一些令人惊奇的事情。

前几天我发现微软推出了一个新的东西,叫做ASP.NET Web API

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

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

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

4

11 回答 11

253

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

在此处输入图像描述

于 2013-05-02T18:20:06.680 回答
191

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

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

于 2012-02-19T19:48:53.903 回答
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 Podcast 264 - 这不是你父亲的 WCF - 关于 WebAPI 与Scott Hanselman 的 Glenn Block 的更多信息。

于 2012-04-03T20:42:01.820 回答
68

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

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

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

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

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

于 2013-01-06T09:01:37.257 回答
44

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

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

于 2016-12-22T15:37:58.227 回答
34

WCF 会给你很多开箱即用的东西,它甚至无法与任何东西相提并论。除非您想自己实现(仅举几例)身份验证、授权、加密、排队、节流、可靠消息传递、日志记录、会话等。WCF 不只是 [only] Web 服务;WCF 是 SOA 的开发平台。

于 2014-07-02T10:42:16.203 回答
18

为什么我要回答:

我花了很多时间来了解这两种技术之间的区别。我将把我认为的所有这些观点都放在这里“如果我在四处寻找这个答案的时候有这些观点,那么我很早就决定选择我需要的技术。”

信息来源:

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 是 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:

不可否认,基于 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。

于 2017-03-20T22:37:33.377 回答
12

MSDN上有一个关于这个的比较

WCF 和 ASP.NET Web API

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

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

在公司网络之外,并使用 PHP、Python 等多种技术:使用 Web API 和 REST

于 2017-02-08T01:31:10.380 回答
10

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

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

于 2016-03-04T12:33:34.547 回答
7

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

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

于 2016-09-13T06:34:27.690 回答
1

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

于 2017-06-18T17:17:08.227 回答