哪个更适合我的场景——WCF 还是 WebAPI?

Which is better for my scenario - WCF or WebAPI?

我的情况是 - 我正在开发一个系统来帮助汽车服务与他们的客户沟通,反之亦然。将有两种产品 - 一个用 Xamarin.Forms 编写的移动应用程序和一个用 ASP.Net 编写的网页 - 两者或多或少做同样的事情,一个替代方案。数据库将托管在 SQL 服务器上。现在我对 "middle" 层感到困惑。我已经阅读了很多关于 WCF 和 WebAPI 的文章,但我仍然无法弄清楚哪个更适合我。对这种情况有什么建议吗?

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

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