【问题标题】:ASP.Net Web API vs WCF, which one should I choose in my projectASP.Net Web API vs WCF,我应该在我的项目中选择哪一个
【发布时间】:2017-05-01 23:58:01
【问题描述】:

到目前为止,我已经阅读了很多关于 WCF 和 ASP.Net Web API 之间差异的文章。不幸的是,我无法清楚地知道什么将有助于我的目的。我读过的大部分文章都强调了这两个 Web 服务的设计观点。但我很困惑什么最适合我的项目,为什么?这是我对该项目的简要说明。

我需要在两台服务器之间创建一个通信通道(都是用 C# 编写的)。服务器将使用消息(某些类型的命令)进行通信。消息有时只能是确认,有时消息可能包含进行某些计算的指令。例如,一条消息可以画一些东西,或者发送一条短信等。这些消息不一定会涉及任何数据库事务。但是这些消息有时可以发送大型文本文件作为有效负载(最大大约 1-5 MB)。我相信 WCF 肯定会做到这一点,但我可以用 ASP.net Web API 做同样的事情。因为到目前为止我看到的所有 ASP.Net web api 示例:它们适用于操纵某种数据库存储(GET、PUT、DELETE)的 RESTful 服务。但在我的情况下,我需要公开服务点,这将

进行某种处理,例如返回计算值、发送和确认消息等。

不仅仅是操作数据库存储。

那么,最好和最简单的方法应该是什么?需要指出的是,我没有找到任何使用 ASP.Net Web API 实现此目的的直接示例。

【问题讨论】:

  • 你能详细说明一下 - 一条消息可以画什么是什么意思吗?
  • 一个服务器可以向另一个服务器发送消息以在表面上绘制一些东西,即该服务器已连接到设备。
  • 可能是 stackoverflow.com/a/36442005/3123338 的副本,我发现答案比 Rajesh 的更完整(但仍然很好:))

标签: c# asp.net web-services wcf asp.net-web-api


【解决方案1】:

您提出的问题过于宽泛或主要基于意见,很难举例说明您提出的问题。

要点:

  • 首先,如果您要创建可在不同平台上使用的服务,请使用 WCF。
  • 其次,如果您要创建要使用外部资源的互联网服务,请使用 Web API。
  • 如果您要为低带宽设备或移动设备创建服务以访问 client.HTTP,Web API 是最佳选择 与 SOAP 相比,请求/响应也更具可读性,因为它 包含标题、正文等,这使得它变得复杂。

只需花几分钟时间阅读下面的文章,直到您完全理解一些原则。

原始来源可以找到HereHereHere

谁在 WCF 或 WEB API 之间进行选择:

  1. 当您想要创建一个应该支持特殊场景(例如单向消息传递、消息队列、双工通信等)的服务时,请选择 WCF。
  2. 如果您想创建一个可以使用快速传输通道(如 TCP、命名管道,甚至可能是 UDP(在 WCF 4.5 中))的服务,并且您还希望在所有其他传输通道时支持 HTTP,请选择 WCF不可用。
  3. 如果您想通过 HTTP 创建面向资源的服务,可以使用 HTTP 的全部功能(如 URI、请求/响应标头、缓存、版本控制、各种内容格式),请选择 Web API。
  4. 如果您希望将服务公开给各种客户端,包括浏览器、手机、iphone 和平板电脑,请选择 Web API。

为什么选择 Web API

  • Web API 没有像 WCF REST 服务那样繁琐而广泛的配置。
  • 很简单,用Web API创建服务。与使用 WCF REST 一样,创建服务有点困难(需要清楚地了解配置)。
  • Web API 仅基于 HTTP 和 HTTPS,易于以 REST 完整方式定义、公开和使用。
  • Web API 是轻量级架构,适用于智能手机等带宽有限的设备。

我的意见:

  • 最简单的方法 - Web API(因为您没有任何示例)
  • 最难的方法是(配置)- WCF(最好使用 WCF,因为您有示例)

我希望这能让您清楚地了解选择什么...

【讨论】:

    【解决方案2】:

    首先,RESTful 是一种无状态且统一的接口规范,可应用于 Web 服务。它不必是自动的,只有由数据库支持的普通旧 CRUD 服务。

    在现实世界中,我们很难说所有的 Web REST API 都完全尊重规范,事实上它们大部分时间都没有,尤其是无状态部分。

    对于基于消息的 API,特别是如果它是双向的和基于事件的,您可以使用 websockets 并将 REST API 视为一种公开统一的、无状态的 web 接口来创建它们的方法。是的,您可以使用带有 ASP.NET WebApi 的 websockets,那里有很多教程,即使是较新的 ASP.NET Core。

    “服务之间”的交互部分与通常的 Web 浏览器没有什么不同 Web 服务,您只是在客户端使用 C# 代码而不是 JS。

    我几乎不推荐使用 SOAP 的 WCF,因为考虑到当今的 Web 标准,它很难移植。例如,如果想使用浏览器客户端而不是其他 ASP.NET 服务,那么您将不得不做额外的代码客户端来处理支持。

    您可以使用WCF websockets,提供几乎所有 WCF SOAP 的优点。

    tl;博士:

    • 您可以混合使用 RESTful 和 Websockets,这实际上比使用完整的 REST 或完整的 Websockets 更好
    • 个人偏好使用 SOAP 而不是 websockets,但考虑到您之后想要做什么,这样做会带来潜在的技术债务
    • 服务之间的消息 API 与服务和浏览器之间的消息 API 没有什么不同

    【讨论】:

      【解决方案3】:

      WebAPI 不仅适用于 RESTful Web 服务。您可以轻松地向 WebAPI 控制器发送请求并按照您想要的方式处理它:计算、发送消息、与 CRM 交互、与 DB 交互或其他任何方式。

      创建 WCF 是为了管理基于 SOAP 的 Web 服务并带来额外的复杂性。它处理 TCP、Mime...

      如果你只需要处理 HTTP 请求,最简单的方法就是使用 WebAPI。

      【讨论】:

      • 嗨,我明白了。但到目前为止,我还没有遇到一个例子。另一方面,我看到的基于 WCF 的示例涵盖了这种类型的操作。能否请您给我看一个例子或引导我举一个例子。
      • 一旦你得到请求,无论你是在WCF还是在WebAPI的情况下,逻辑都是一样的。这是处理大文件的示例:strathweb.com/2012/09/…
      • 传输大文件我理解。那么如果没有数据模型,我的服务只会做一些计算或者执行一些服务应该是什么场景呢?
      • WebAPI中会有数据模型。您将拥有作为参数传递的数据模型和作为响应返回的数据模型。在 WebAPI 方面,您可以按照自己的方式处理这些模型。
      • 它将是一个具有一些属性的对象:文本、电话号码等。与使用 WCF 服务的对象相同。我认为您需要开始针对特定案例实施某些事情,并在遇到特定问题后提出另一个问题。
      【解决方案4】:

      如果 Web API 用于 RESTful 服务,我建议使用 Web API,因为 WCF 从未用作 Restful 服务,尽管您可以作为专门为此而设计的 Web API。

      【讨论】:

      • 我没有提到它将是一个 RESTful 服务。我刚刚描述了我的项目并征求建议,哪种网络服务最适合我的目的。
      猜你喜欢
      • 2022-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多