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

时间:2016-12-16 08:27:20

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

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

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

的服务点
  

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

不只是操纵数据库商店。

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

4 个答案:

答案 0 :(得分:10)

您提出的问题是过于广泛或主要以意见为基础,很难为您所提出的问题举例说明。

要点:

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

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

原始来源可以找到HereHereHere

向谁选择WCF或WEB API:

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

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

    我的意见:

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

    我希望这能让你明白选择什么......

答案 1 :(得分:2)

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

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

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

"服务与#34;交互部分与通常的Web浏览器没有什么不同< => Web服务,您只是为客户端使用C#代码而不是JS。

我很难推荐使用SOAP的WCF,因为考虑到现在的网络标准,它几乎不可移植。例如,如果想要使用浏览器客户端而不是其他ASP.NET服务,那么您必须执行额外的代码客户端来处理支持。

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

tl;博士:

  • 您可以混合RESTful和Websockets,它实际上可能比完整的REST或完整的Websockets更好
  • 个人喜欢在websockets上使用SOAP,但考虑到你之后想做什么,确实会有潜在的技术债务
  • 服务之间的消息API与服务和浏览器之间的消息API没有区别

答案 2 :(得分:0)

WebAPI不仅适用于RESTful Web服务。您可以轻松地将请求发送到WebAPI控制器并按照您的需要进行处理:计算,发送消息,与CRM交互,与DB或其他任何内容交互。

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

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

答案 3 :(得分:0)

我建议使用Web API,如果它是用于RESTful服务的,因为WCF从未被用作Restful服务,尽管你可以作为Web API的一部分用于此。