WCF Web API和ASP.NET Web API有什么区别?

40

我之前用过WCF WebAPI做一些工作,很喜欢它的很多特点,现在我只是在测试ASP.NET Web API,但是它似乎和WCF完全不同。(也就是说它与WCF完全不相关)

有没有人知道ASP.NET 4 Web API包含了WCF WebAPI的哪些特性?


4
这不是MVC WebAPI,而是ASP.NET Web API,与ASP.NET MVC没有任何关联。请看这篇博客文章:http://blogs.msdn.com/b/henrikn/archive/2012/02/23/using-asp-net-web-api-with-asp-net-web-forms.aspx 如果您愿意,也可以进行自托管。 - tugberk
7个回答

23

我对此进行了更多阅读,并找到了一些微软员工写的页面:

http://wcf.codeplex.com/wikipage?title=How%20to%20Migrate%20from%20WCF%20Web%20API%20to%20ASP.NET%20Web%20API :

WCF Web API 的抽象大致映射到 ASP.NET Web API 如下:

WCF Web API -> ASP.NET Web API

  • Service -> Web API 控制器
  • Operation -> Action
  • Service contract -> 不适用
  • Endpoint -> 不适用
  • URI templates -> ASP.NET 路由
  • Message handlers -> 相同
  • Formatters -> 相同
  • Operation handlers -> 过滤器、模型绑定器

还有 http://wcf.codeplex.com/discussions/319671

集成堆栈支持以下功能:

  • 现代化的 HTTP 编程模型
  • 完全支持 ASP.NET 路由
  • 内容协商和自定义格式化程序
  • 模型绑定和验证
  • 过滤器
  • 查询组合
  • 易于单元测试
  • 通过 DependencyResolver 改进了控制反转 (IoC)
  • 基于代码的配置
  • 自托管

15

据我所知,微软在这里有点名字混乱。

我假设您知道WCF是什么,它是一个构建在XML之上的大型框架,允许用户使用各种技术(从SOAP到REST到MSMQ等)构建分布式服务。

对我来说,它太难用了,需要很多引导才能工作,最终他们意识到了这一点,并开始为简单的http服务提供一些默认配置(WCF REST starter kit?)。ASP.NET MVC正在获得动力,它提供的一些功能(例如自动参数匹配)开始出现在WCF中。

现在情况是这样的:

  

公告:WCF Web API现在是ASP.NET Web API!与ASP.NET MVC 4 Beta一起发布的ASP.NET Web API。本网站上的WCF Web API和WCF支持jQuery内容将于2012年底删除。

http://wcf.codeplex.com/wikipage?title=Getting%20started:%20Building%20a%20simple%20web%20api

在我看来,这样更好。

我非常确定可以在WCF之上托管asp.net mvc4 webapi(如果您需要),但我找不到可以证明我正确(或错误)的文档。

更新(无法作为评论适合):

等等,"将通信技术的子集从一个库/框架移动到另一个库/框架"和 "替换WCF"之间存在很大的区别。我个人认为WCF是为某种通信概念设计的,具有相当酷的设计,但分布式计算正在转向新的(更简单)解决方案(例如功能丰富的SOAP与轻便灵活的REST相比,尽管许多人仍然以RPC方式使用REST),而这种编程模式更适合MVC架构,而不是WCF。虽然他们曾经努力设计一些基于WCF的简单的构建/消费Web服务的方法,但他们最终发现这不是正确的解决方案。

更不用说现在许多开发人员都使用ASP.NET MVC,并希望为其Web应用程序创建REST Web服务,而与WCF混淆通常对这些事情来说过于繁琐,我也亲身经历过。

我认为路由机制非常棒,是正确的方法,如果你仔细观察,它们在WCF中包含了部分内容(名称和类型不同,但模式在那里)。所以是的,我认为如果微软不放弃WCF的那部分 我们 应该去做。严格回答,不,我认为在asp.net mvc*中永远不会找到WebGet / WebInvoke,它只是不适合。

是的,自托管可能是目前ASP.NET MVC4中包含的唯一WCF部分。


根据我的了解,MVC4 Web API旨在直接替代WCF WebApi。但是我不太确定它是如何工作的,因为它似乎是通过ASP而不是WCF提供的,这有点奇怪。ASP是否应该替换WCF?我也不太确定新产品中包含哪些WCF WebAPI的部分,我注意到测试客户端还没有出现,但我也想知道路由(和其他方面)的差异,ASP.Net路由是否应该替换Wcf WebAPI的WebInvoke扩展,或者它们仍然存在于某个地方? - undefined
我不太确定你所说的“我相当确定可以在WCF之上托管asp.net mvc4 webapi”,它们对我来说有点互斥,你是指“自托管”吗? - undefined
所以,基本上你的意思是WCF的SOAP部分仍然是WCF,但REST部分现在已经转移到了ASP。 - undefined
5
“对我来说使用它非常困难,需要很多引导才能让它正常工作。” 完全正确! - tugberk
我同意@tilde的观点。对于像经典Web服务那样通过Http进行的示例用法,我认为WebAPI已足够,使用WCF则过度。 - Cheung
显示剩余3条评论

14

看起来WCF本身正在消亡,或者至少变得比它应该的重要性要低得多,因此也没有太多的开发工作放到它的特性集中。WCF的新特性本身更多是为了表面功夫。

WCF旨在作为跨进程通信的传输/协议独立方式。即使这个想法是独立的抽象,但它基本上是构建在SOAP堆栈之上。当WCF 3.5引入对REST的支持时,它主要是被“hack”进去的,因为REST完全依赖于传输。使用传输独立的API来支持通过直接使用传输特性进行的进程间通信似乎很不方便。因此,微软首先发布了WCF Rest API Starter Kit,但它从未达到RTM,而只是预览功能,这些功能后来包括在WCF 4和最终的.NET 4.5或WCF Web API中。由于REST依赖于传输,并且目前仅与HTTP一起使用(尽管理论上可以使用其他传输协议),因此该API已移动到.NET部分,它更适合处理HTTP - 目前非常流行的ASP.NET MVC。


WCF 的主要目的是抽象化 HTTP、TCP 等协议,而 REST 技术栈则是充分利用 HTTP 协议,因此将两者分离是保持 WCF 作为纯协议中立服务技术栈的一个重要举措。 - Teoman Soygul
9
-1:「ASP.NET」Web API 的出現並不意味著 WCF 正在消亡或變得不那麼重要。這只是表明 REST 服務的目標市場與 WCF 的目標市場不同而已。 - John Saunders
1
WCF是后端服务,而WebApi更多是前端服务。 - radu florescu

9

WCF Web API已被ASP.NET Web API所取代,后者将WCF Web API的功能与ASPNet MVC的特性合并。ASP.NET Web API是一个新的(02/2012)框架,用于构建和消费HTTP服务,并为构建RESTful服务提供平台。

尽管原问题中没有提到,但值得注意的是,WCF仍然存在,其REST支持在您必须支持现有SOAP(WS-*)服务但希望添加REST以达到更多客户端时仍然有用。

参考资料

  1. CodePlex: WCF Web API 现在是 ASP.NET Web API
  2. CodePlex: Daniel Roth 谈论 WCF 的未来
  3. Chanel9: Dan Roth 谈论新的 ASP.NET Web API

1

这里有一篇关于Web Service、WCF和Web API的好文章 http://goo.gl/T29A5B

Web Service

  • 基于SOAP并返回XML数据
  • 仅支持HTTP协议
  • 由能够理解xml SOAP服务的客户端使用
  • 可以在IIS上托管,只能在IIS上托管
  • 易学易懂

WCF

  • 基于SOAP并返回XML数据。与JSON相比,SOAP较重,网络开销也大。
  • 增强版的Web服务,支持多种协议,如TCP、HTTP、HTTPS、命名管道、MSMQ等。
  • 当客户端和服务器都使用.Net时更可靠。
  • 实现和配置复杂
  • 由能够理解xml SOAP服务的客户端使用
  • 支持自托管、IIS和使用Windows服务。

Web API(Web API 2.0)

  • 专门为在 .Net Framework 上构建 HTTP Restful 服务而设计。
  • Web API 可以轻松地作为 JSON 阅读和使用。
  • 支持 HTTP 的所有特性,如 URls、请求/响应、头信息、缓存和版本控制。
  • Web API 支持许多 HTTP 动词,如 GET、POST、PUT、DELETE 等。
  • Web API 是无状态的。
  • Web API 支持 MVC 特性(控制器、操作结果、路由、过滤器、模型绑定器、IOC 容器或依赖注入)
  • Web API 可以自托管、在应用程序内部托管和在 IIS 上托管。
  • 自托管使用 OWIN(Open Web Interface for .NET)。

1
以下摘录自 这个MSDN页面,很好地总结了这个困境。
使用WCF创建可靠、安全的Web服务,可通过各种传输方式访问。使用ASP.NET Web API创建基于HTTP的服务,可从各种客户端访问。如果您正在创建和设计新的REST风格服务,请使用ASP.NET Web API。尽管WCF提供了一些支持编写REST风格的服务,但在ASP.NET Web API中对REST的支持更加完整,并且未来的所有REST功能改进都将在ASP.NET Web API中进行。如果您有现有的WCF服务并希望公开其他REST端点,则使用WCF和WebHttpBinding。

0

ASP.net Web API 是轻量级的,内置 REST 支持。它更适合移动应用程序。WCF 带有更多选项,比较臃肿。选择其中之一取决于系统的复杂性。


“Bloated”是一个无意义的词。此外,WCF确实支持REST。 - John Saunders

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