【问题标题】:Which is better for my scenario - WCF or WebAPI? [closed]哪个更适合我的场景 - WCF 或 WebAPI? [关闭]
【发布时间】:2020-08-08 21:49:30
【问题描述】:

我的情况是 - 我正在开发一个系统,帮助汽车服务与客户沟通,反之亦然。将有两种产品——一个用 Xamarin.Forms 编写的移动应用程序和一个用 ASP.Net 编写的网页——它们或多或少都在做同样的事情,这是一种替代方案。该数据库将托管在 SQL Server 上。现在我对“中间”层感到困惑。我已经阅读了很多关于 WCF 和 WebAPI 的内容,但我仍然不知道哪个更适合我。对这种情况有什么建议吗?

【问题讨论】:

  • 通常哪个更好问题作为基于意见或寻求建议而结束。所以我只能给你一个意见。我建议选择较晚的(WebAPI)和Net.Core,因为它们现在支持更多,但是有很多因素需要评估。 ISP 支持?熟悉框架?时间限制?对不起,但你可以看到为什么这些问题是题外话。答案不可避免地是不精确的,它们的用处会随着时间的推移而消失
  • 强烈强烈建议不要将 WCF 用于任何新项目。 WCF 已过时。 WCF 是围绕 SOAP、XML 和 WS-* 系列的“Enterprise-y”Web 服务标准构建的,这些标准在今天几乎无关紧要(SAML 在某种程度上仍然存在......)。 WCF 仅通过适配器层支持 RESTful-esque 服务和 JSON,这很难配置(服务合同、行为、端点,都在 web.config 中配置,具有冗余和重叠问题)。
  • 所有声称的 WCF 内置自动生成客户端代码的“好处”都适用于使用 Swagger 的 RESTful Web 服务 - 自 2008 年以来,WCF 客户端生成代码基本保持不变 - svcutil 程序甚至不支持 2010 年后的 TAP(基于Task 的异步模式),取而代之的是 it generates legacy iAsyncResult or Event-based asynchronous code,它与现代开发平台不兼容,只是 .NET 中的陈旧和 alien核心。
  • 简而言之:不要将 WCF 用于新项目!(我之所以大喊大叫,是因为看到有人没有做最少的研究来看到 WCF完全死了和过时了)。只需在 Google 上搜索“wcf obsolete”,就可以看到过去 8 年中数百篇博客文章庆祝 WCF 无关紧要的事实(因为 ASP.NET Web API 是在 2012 年左右发布的)。
  • @Dai 我所做的不仅仅是“最少的研究”,而且我没有注意到它已经死了。无论如何,谢谢你的意见。

标签: c# asp.net wcf xamarin webapi


【解决方案1】:

“更好”总是一个难以回答的问题。所以,这是我的免责声明。

WebAPI 目前非常标准,而且非常简单。它允许使用简单的 REST api——尽管这些对 WCF 来说也是非常可行的。

WCF 和 Web API 的主要区别

网络 API

嗯,Web (HTTP) - 几乎所有语言都支持它,它的重量相对较轻。

WCF

它很大 - HTTP 只是绑定的选项之一。它是企业级连接解决方​​案的理想选择。例如 - 重用您的 HTTP 绑定和/或消息队列逻辑。


WCF 的一个很好的特性是,至少对于 C#,它会为您生成客户端库和模型。它带有 Visual Studio(注意:请参阅警告)。对于 WebAPI,您可能需要自己创建客户端库 - 这基本上是很多 HTTP 调用。

如果你想要它简单 - WebAPI 有很好的支持并且可以从任何语言轻松实现 - 客户端和模型非常简单 - 但通常你需要自己编写代码,除非你使用 OpenAPI 规范和一些工具包.


警告

生成的 WCF 库可能与您正在使用的框架(Mono、Xamarin、Core 等)兼容,也可能不兼容。正如@Dai 所提到的,WCF 客户端库生成可能已经过时了。虽然我不知道是否有更多的开源工具可用于从 WSDL 中提取客户端。所以,你应该先试试你的客户端是否兼容。

对于 Web API 客户端生成,您可以查看 Swaggerhub 等工具。请注意:您需要在应用程序中定义规范(或明确提供) 见:https://swagger.io/tools/swaggerhub/


建议(显然只是一种意见)

如果您不需要完整的 WCF 包、广泛的绑定功能等,我会选择 WebAPI 变体。

如果您将它与 Swagger(OpenAPI 规范)结合使用,您将获得一个非常开放且易于使用的 API,可用于多种语言。

有关 swagger/swashbuckle 的更多信息:https://docs.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-3.1&tabs=visual-studio

【讨论】:

  • 感谢您的意见。确切地说,我最喜欢 WCF 的一点是,就 C# 应用程序而言,它更容易(或更少的工作)实现/使用。这吸引了我。
  • @Michal_Drwal:请注意:我不确定 Xamarin 是否能够使用 WCF 客户端 - 如果您要使用它,您可能需要先进行 POC。
  • 它适用于 Xamarin,两者都适用。我检查了它,这就是我感到困惑的原因。我是服务新手,我只是在寻找一些“破坏交易”的因素,这些因素会阻止我使用这种或那种技术。
  • "WCF 的一个不错的特性是,至少对于 C#,它会为您生成客户端库和模型。它带有 Visual Studio。对于 WebAPI,您可能需要自己创建客户端库- 这基本上是很多 HTTP 调用。” - 这在实践中是不正确的。 WCF 的客户端生成代码自 2008 年以来一直处于冻结状态,而 .NET 开发人员生态系统拥有大量工具和库,可用于自动生成 Swagger 定义和用于 RESTful Web 服务的客户端。
  • @Dai:好点,虽然我试图用我的警告说明来解决这个问题。我将尝试详细说明它。关于 Swagger(又名:开放 API 规范)的旁注;它在模板中不是开箱即用的——你需要先实现它。
猜你喜欢
  • 2011-10-22
  • 2016-02-02
  • 2010-12-04
  • 1970-01-01
  • 2011-11-25
  • 2013-08-25
  • 2015-07-17
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多