WCF和ASP.Net Web API的区别

93

每种技术的优缺点是什么?

WCF Web Api现在已合并到Asp.net中。 Asp.net web api现在支持自托管。

我仍然想知道,如果我想为同一个操作公开多个协议模式,我是否仍然倾向于使用WCF,或者Mvc端点也可以实现这一点?

此外,新的Asp.Net web api是否公开了Wsdl?如果没有,客户端如何确定可用的操作?

MVC最好的特性无疑是modelbinder。WCF等价物有多健壮呢?

那么,有人能告诉我Asp.net web api提供了什么优势?在我看来,WCF似乎是更强大/可扩展的选择。 Mvc Web Api唯一比WCF模型优越的可能只是开发的易用性,但如果最终成为严重的设计限制,那就毫无意义了。


15
我觉得这个问题的标题有点误导人。标题是“MVC 4 vs Wcf Web Api”,但是问题似乎更多地涉及WCF vs ASP .Net Web API。从标题上我以为比较的是标准MVC 4框架(控制器、模型、视图)和ASP .Net Web API框架。还有其他人觉得这个标题有误导性吗? - BruceHill
4个回答

72

6
这是一篇非常好的文章,是我见过最好的。但是现在我比以前更加困惑了。WebApi增加了很多功能,但是无法公开其他端点似乎非常限制。如果您有一个可以使用SOAP的客户端,他们现在将被迫手动构建操作并解析结果,而SOAP可以为他们生成整个上下文。您还将锁定他们无法使用更高级的SOAP功能,例如可靠会话和ACID事务... 唉。 - Alwyn
2
@Alwyn - 我认为你提到的所有事实都是真实的,因此不应该让你感到困惑,而是帮助你做出决定 - Web API 有它自己的优点,但如果你的服务需要从多个端点(包括其他协议)公开,或者你有客户端自动生成功能或SOAP高级功能的强烈需求 - 这些可能是更喜欢 WCF 而不是 Web API 的考虑因素。 - BornToCode
@BornToCode:使用WebAPI可以自动生成客户端代码。您可以使用WebAPI代码生成Swagger JSON文件。然后,可以使用swagger-codegen等代码生成器将该JSON文件用于生成大量目标语言的客户端代码。 - unintentionally left blank
@unintentionallyleftblank - 在我看来,通过WCF自动生成客户端代码仍然比Web API更加“用户友好”。 - BornToCode

15

选择取决于我们想要做什么。

  1. ASP.NET Web API 是一个构建基于 HTTP 的非 SOAP 服务的框架 - 因此使用该框架时没有更多可用的传输协议。
  2. WCF / Windows Communication Foundation 是一种交换基于 SOAP 消息的框架 - 在此我们使用了许多传输协议:HTTP、TCP、命名管道、MSMQ 等等......

关于数据量方面哪个表现更好我不确定,也许是 WCF,因为我们可以使用低层协议。欢迎任何评论。


2
不要误会,HTTP只是一个应用层协议。它并没有固有限制来使用何种传输层协议。 - smwikipedia

8

WCF Web API 主要专注于REST实现。如果你正在设置一个REST实现,标准的WCF组件会让人感到有点麻烦。如果你正在设置RESTful服务,那么你会发现WCF Web API是一种更加愉快的体验。但是,如果你正在设置SOAP服务,那么WCF Web API可能并不适合你,最好还是使用WCF来提供服务。


2
是的,配置可能很麻烦,但这只是一次性的设置成本。一旦你完成了它,你就可以将行为/端点复制粘贴到另一个服务中。大多数情况下,你只需要使用WebGet标记新操作即可。另一方面,如果你有一个想要使用Soap + Wsdl的客户端,那么只需要进行配置更改,而不是代码+部署+QA+其他操作。那么Mvc Web Api有什么优势呢? - Alwyn
1
如果您已经熟悉WCF,可以继续使用。除了我提到的内容之外,WCF Web API中REST方面也有一些内部改进(我没有列表在手边),但是任何一种都可以工作,如果您有大量的运行服务,我不会花费数周进行重构,尤其是由于思考方式上存在一定的范式转变。以后的工作,我建议考虑使用WCF Web API。但是我已经使用WCF Web API相当长时间了,所以可能有偏见。 - Gregory A Beamer

0

在企业内部/ B2B 网站中使用 WCF,而在 B2C/C2C/互联网网站中使用 Web API... SOAP/XML 仍然是企业内部通信的标准,它不会消失!!!


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