ASP.Net Web API和WCF,我在项目中应该选择哪一个?

8
我已经阅读了许多关于WCF和ASP.Net Web API之间差异的文章,但是我无法得出清晰的想法来确定哪个更适合我的项目。大多数文章都强调了这两种Web服务的设计观点。但我对我的项目最适合哪个及为什么感到困惑?以下是我对该项目的简要描述。
我需要在两个服务器之间创建一个通信渠道(两者均使用C#编写)。服务器将使用消息进行通信(某些类型的命令)。有时消息可能只是确认,而有时消息可能包含执行某些计算的指令。例如,一个消息可以是绘制某些内容或发送SMS等。并且不一定需要涉及任何数据库事务。但是消息有时可以作为有效负载发送大型文本文件(最大约1-5 MB)。我相信WCF肯定可以做到这一点,但是ASP.net web API是否也可以做到同样的事情?因为到目前为止,我看到的所有ASP.Net Web API示例:它们都适用于操纵某种类型的DB存储的RESTful服务(GET、PUT、DELETE)。但在我的情况下,我将需要公开服务点,以执行某种处理,例如返回计算值、发送和确认消息等等,而不仅仅是操作DB存储。
那么,应该选择哪种最好、最简单的方法呢?需要指出的是,我没有找到任何使用ASP.Net Web API实现此目标的直接示例。

你能详细说明一下“一个消息可以画出某些东西”的意思吗? - Amit Kumar Ghosh
一个服务器可以向另一个服务器发送消息,在表面上绘制一些东西,即该服务器连接到某个设备。 - P basak
可能是 https://dev59.com/t1oV5IYBdhLWcg3wTdIb#36442005 的重复,我发现这个答案比 Rajesh 的更详细(但仍然很好 :) ) - Mister Q
4个回答

11
你所提出的问题过于宽泛或基本上是基于观点的,很难为你所问的内容举例。
重要要点:
首先,如果您要创建一个将在不同平台上使用的服务,则选择 WCF。
其次,如果您正在创建将使用外部资源的互联网服务,则选择 Web API。
如果要为低带宽设备或移动设备创建服务以便客户端访问,则 Web API 是最佳选择。与 SOAP 相比,HTTP 请求/响应也更易读,因为它包含头、正文等,使其复杂化。
请花几分钟时间阅读下面的文章,直到您完全理解其中的一些原则。

原始来源可以在这里, 这里这里找到。

对于选择WCF还是WEB API的人:

  1. 当您想要创建支持特殊场景(如单向消息、消息队列、双工通信等)的服务时,请选择WCF。
  2. 当您想要创建一个服务,并且希望在可用的情况下使用快速传输通道(如TCP、命名管道,甚至在WCF 4.5中使用UDP),并且在所有其他传输通道不可用时也支持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-full方式定义、公开和使用。
  • 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 的优点。
简而言之:
- 您可以混合使用 RESTful 和 Websockets,这实际上比完全使用 REST 或完全使用 Websockets 更好。 - 在 SOAP 和 Websockets 之间选择是个人偏好,但考虑到之后要做什么,可能会带来潜在的技术债务。 - 服务之间的消息 API 与服务和浏览器之间的消息 API 没有区别。

0

WebAPI不仅适用于RESTful网络服务。您可以轻松发送请求到WebAPI控制器并按照自己的方式处理它:计算、发送消息、与CRM互动、与数据库互动或任何其他操作。

WCF是为管理基于SOAP的网络服务而创建的,带来额外的复杂性。它处理TCP、Mime等。

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


嗨,我明白了。但是到目前为止,我还没有遇到过一个例子。另一方面,我看到的基于WCF的示例涵盖了这种类型的操作。你能否给我展示一个例子或者引导我找到一个例子呢? - P basak
一旦您收到请求,无论是在WCF还是WebAPI情况下,逻辑都将完全相同。以下是处理大文件的示例:http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/ - PMerlet
传输大文件,我明白。那么如果没有数据模型,我的服务只会进行某种计算或执行某些服务,应该是什么情况? - P basak
1
它将是一个带有一些属性的对象:文本、电话号码等,与WCF服务中的相同。我认为你需要开始实现一个具体的案例,并在遇到具体问题时提出另一个问题。 - PMerlet
谢谢你的帮助。我会的。 - P basak
显示剩余2条评论

0
我建议如果是用于RESTful服务,可以使用Web API,因为WCF从未被设计成用于提供Restful服务,尽管你可以将其作为一个服务,而Web API则是专门为此而设计的。

我没有提到它将是一个RESTful服务。我只是描述了我的项目并询问了哪种Web服务最适合我的目的。 - P basak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接