WCF 与 ASP.NET Web API [关闭]

Posted

技术标签:

【中文标题】WCF 与 ASP.NET Web API [关闭]【英文标题】:WCF vs ASP.NET Web API [closed] 【发布时间】:2012-03-10 01:21:07 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

+1 个有趣的问题。也许你会在programmers.stackexchange.com得到很好的回应 您正在使用“旧”WCF 的哪些功能?您是否正在尝试构建 RESTful API?还是 RPC,还是 SOAP? @marcind:感谢您的回答。它主要是 RESTful 调用。根本没有 RPC。 另一个好的答案可以在***.com/a/9859981/456814找到 两者是一回事,但人们可能遇到的旧区别是 wcf 基本上是用于 Intranet 和 Webapi 用于 Internet 的,是的,我们当然也可以让 wcf 变得安静!基本上两者都在 http 协议 web.http 上运行 【参考方案1】:

新的ASP.NET Web API 是之前WCF Web API 项目的延续(尽管有一些concepts have changed)。

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

【讨论】:

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

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 的 podcast : Hanselminutes Podcast 264 - This is not your father's WCF - All about the WebAPI with Glenn Block 了解更多信息。

【讨论】:

【参考方案3】:

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

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

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

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

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

【讨论】:

这假设 WCF 只处理 SOAP 消息,这是一个不正确的假设。您也可以在 WCF 服务上公开 REST 端点。我会修改它说,如果您不打算使用 WCF 的功能(请参阅 tridy 的消息),那么 Web API 是有意义的。 是的,WCF 也可以进行 Rest。基本上,Web api 是 WCF 功能的一个子集,如果您在做简单的 CRUD 样式数据应用程序,它是合适的。【参考方案4】:

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

【讨论】:

Web API 支持OData,这对于 CSOM 来说简直是天赐之物。 令人惊讶的是,MS 拥有如此多的内容并没有说明任何真正有价值的东西。例如,WCF 支持 JSON,但是这个信息很好地隐藏在这个“比较”中,而它在文本上说 WebApi 支持 JSON 不是一次而是两次。 这个表没有意义。 “JQuery”(大写 J 的引号)是一种协议和/或格式? 有趣。 MSDN 将 HTTP 作为传输协议是错误的。 HTTP 是一种应用层协议。【参考方案5】:

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

【讨论】:

如果我没记错的话,我认为WEB API也提供了你列出的大部分功能。 No Web api 不提供这些东西或提供非常简单的版本。 那么它是什么 - 它是否提供它们? 认证和授权请查看asp.net/web-api/overview/security/…。 tl; dr:它在 IIS 中绝对支持它。对于加密,您可能需要使用 SSL,ASP.NET 自然地处理队列(但这直接基于可用的工作线程与传入请求)。会话存在(但我从不建议直接使用会话)。日志很容易设置(通过 ActionFilters 等)。可靠消息传递的替代方法是使用 SignalR(尽管不完全是)。 "没有什么可比的"??不太可能。【参考方案6】:

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

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

【讨论】:

WCF == WS-*, webapi == REST【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

Web 服务 API 也可以自托管(Owin / Katana)以及在 Windows 服务中【参考方案9】:

MSDN上有关于这个的比较

WCF and ASP.NET Web API

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

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

在公司网络之外,使用 PHP、Python 等多种技术:将 Web API 与 REST 结合使用

【讨论】:

【参考方案10】:

我为什么要回答:

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

信息来源:

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 服务的技术。 (它很久以前就取代了 Microsoft 的基于 SOAP/WSDL 的 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 服务中集中访问客户数据的示例。

结论:

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。

【讨论】:

请不要添加same answer to multiple questions。一旦您获得足够的声誉,就回答最好的一个并将其余的标记为重复项。如果不是重复的,请根据问题调整帖子并标记以取消删除。【参考方案11】:

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

【讨论】:

以上是关于WCF 与 ASP.NET Web API [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Web API 与 WCF - Web API 能否用于向单例 WCF 服务提供基于 REST 的通信?

强大的自托管服务器的最佳选择:WCF 与 ASP.NET Web Api

尝试将 ASP.NET CORE 2 Web API 应用程序连接到 WCF 服务

无法让 ASP.NET Core Web API 与 IIS 一起使用 [关闭]

ASP.Net Web API 架构选择

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作