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

时间:2012-02-26 07:22:34

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

我过去使用WCF WebAPI做了一些工作,并且非常喜欢它的很多功能,我现在只是玩ASP.NET Web API而且看起来完全不同(IE完全从WCF)。

有谁知道ASP.NET 4 Web API中包含WCF WebAPI的哪些功能?

7 个答案:

答案 0 :(得分:22)

我已经对此进行了一些阅读,并在MS上发现了几页:

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

  • 服务 - > Web API控制器
  • 操作 - >操作
  • 服务合约 - >不适用
  • 端点 - >不适用
  • URI模板 - > ASP.NET路由
  • 消息处理程序 - >相同
  • 格式化程序 - >相同
  • 操作处理程序 - >过滤器,模型粘合剂

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

集成堆栈支持以下功能:

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

答案 1 :(得分:14)

据我所知,微软在这里做了一些命名混淆。

我假设您知道WCF的全部内容,这个基于XML的大型框架允许用户使用各种技术(从SOAP到REST再到MSMQ等)构建分布式服务。

很难使用(至少对我来说)并且需要大量的引导来使它工作,最终他们意识到这一点并开始为简单的http服务提供一些默认配置(任何人都可以使用WCF REST入门套件?)。 ASP.NET MVC正在获得动力,它提供的一些功能(例如自动参数匹配)开始出现在WCF中。

现在情况如此:

  

公告:WCF Web API现在是ASP.NET Web API! ASP.NET Web API   与ASP.NET MVC 4 Beta一起发布。 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),我认为这种编程模式比WCF更适合MVC架构。努力设计了一些在WCF之上构建/使用Web服务的简单方法,但他们最终发现它不是正确的解决方案。

更不用说许多开发人员现在使用ASP.NET MVC并希望为他们的Web应用程序做休息Web服务,弄乱WCF对于这类事情来说往往有点过头了,而且我已经在我自己的皮肤上经历过这种情况。

我认为路由机制很棒且是正确的方法,如果仔细观察,它们会在WCF中包含部分内容(具有不同的名称和类型,但模式在那里)。所以,是的,我认为如果MS不解雇WCF WE 的那部分应该这样做。要严格回答,不,我认为你永远不会在asp.net mvc *中找到WebGet / WebInvoke,它只是不适合。

是的,自主机可能是目前ASP.NET MVC4中唯一包含的WCF。

答案 2 :(得分:14)

看起来WCF本身在某种程度上已经死亡或者至少变得不那么重要了,因为它本身也没有更多的开发工作量。 New features in WCF本身更具美感。

WCF被设计为进程间通信的独立于传输/协议的方式。即使这个想法是独立的抽象,它主要建立在SOAP堆栈之上。当WCF 3.5为REST提供支持时,它主要被黑客入侵,因为REST完全是关于传输依赖性的。使用传输独立API来支持通过直接使用传输功能完成的进程间通信显得不方便。结果MS首次发布了从未到达RTM的WCF Rest API Starter Kit,但它是后来包含在WCF 4中的功能的预览,最后是.NET 4.5或WCF Web API。因为REST依赖于传输并且目前仅用于HTTP(即使理论上可以使用其他传输协议),API也被移动到更适合HTTP处理的.NET部分 - 当前非常流行的ASP.NET MVC。

答案 3 :(得分:9)

WCF Web API由ASP.NET Web API取代,后者从WCF Web API获取功能,并将它们与ASPNet MVC的功能合并。 ASP.NET Web API是用于构建和使用HTTP服务的新(02/2012)框架,以及用于构建RESTful服务的平台。

虽然不在最初的问题中,但似乎值得注意的是,当您拥有必须支持的现有SOAP(WS- *)服务但希望添加REST以接触更多客户端时,WCF仍然存在并且其REST支持仍然有用。 / p>

参考

  1. CodePlex: WCF Web API is now ASP.NET Web API
  2. CodePlex: Daniel Roth on the Future of WCF
  3. Chanel9: Dan Roth on the new ASP.NET Web API

答案 4 :(得分:1)

this MSDN page上的以下摘录总结了这种困境。

使用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。

答案 5 :(得分:1)

以下是关于Web服务,WCF和Web API http://goo.gl/T29A5B

的好文章

网络服务

  • 基于SOAP并返回XML数据
  • 仅支持HTTP协议。它仅支持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 Services而设计。
  • 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)用于自托管。

答案 6 :(得分:0)

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