【问题标题】:What's the difference between WCF Web API and ASP.NET Web APIWCF Web API 和 ASP.NET Web API 有什么区别
【发布时间】:2012-03-16 02:47:08
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

我在这方面做了更多的阅读,并在这方面找到了 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)
  • 基于代码的配置
  • 自托管

【讨论】:

    【解决方案2】:

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

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

    它很难使用(至少对我而言),并且需要大量的引导程序才能使其正常工作,最终他们意识到了这一点,并开始为简单的 http 服务提供一些默认配置(WCF REST starter kit 有人吗?)。 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 应用程序做 REST Web 服务,对于这类事情来说,使用 WCF 通常是矫枉过正,我亲身经历过。

    我认为路由机制很棒并且是正确的方法,如果您仔细观察,它们在 WCF 中包含了其中的一部分(具有不同的名称和类型,但模式就在那里)。所以是的,我认为如果 MS 不解雇 WCF 的那一部分 WE 应该这样做。严格来说,不,我认为您永远不会在 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 扩展,还是它们还在某处?
    • 我不太清楚你所说的“我很确定应该可以在 WCF 之上托管 asp.net mvc4 webapi”是什么意思,它们对我来说似乎有点相互排斥,你的意思是“自托管”?
    • 所以基本上你的意思是 WCF 的 SOAP 组件仍然是 WCF,但是 REST 组件现在已经转移到 ASP。
    • 其实命名还是挺准确的。以前从事 WCF Web API 工作的 WCF 团队成员转移到 ASP.Net 团队。 WCF Web API 和 ASP.NET MVC 之间存在重叠,这造成了一个令人困惑的选择。 MS解决了这个问题。但仔细观察 Web API 并注意一些核心类驻留在 System.Net.Http 中。听听 Brad Wilson 对 Herding Code 的采访,他谈到了当前 MVC 框架的局限性。
    • “它很难使用(至少对我来说),并且需要大量的引导才能让它工作”完全正确!
    【解决方案3】:

    看起来 WCF 本身正在以某种方式消亡,或者至少变得不那么重要了,因此它在其功能集中投入的开发工作也少了很多。 New features in WCF 本身更具装饰性。

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

    【讨论】:

    • WCF 完全是为了抽象出 HTTP、TCP 等。另一方面,REST 堆栈完全是为了利用 HTTP,因此将两者分开是保持 WCF 作为纯协议中立的一个极好的举措服务堆栈。
    • -1:“ASP.NET”Web API 没有理由相信 WCF 正在消亡或变得不那么重要。有理由相信 REST 服务的目标市场不是 WCF 的目标市场。
    • WCF 是后端服务,而 WebApi 更像是前端服务
    【解决方案4】:

    WCF Web API 被 ASP.NET Web API 取代,它采用 WCF Web API 的功能并将它们与 ASPNet MVC 的功能合并。 ASP.NET Web API 是一个用于构建和使用 HTTP 服务的新 (02/2012) 框架和一个用于构建 RESTful 服务的平台。

    虽然不在最初的问题中,但值得注意的是,WCF 仍然存在并且运行良好,并且当您拥有必须支持的现有 SOAP (WS-*) 服务但想要添加 REST 以接触更多客户端时,它的 REST 支持仍然有用。

    参考

    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

    【讨论】:

      【解决方案5】:

      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。

      【讨论】:

        【解决方案6】:

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

        网络服务

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

        WCF

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

        Web API(Web API 2.0)

        • 专为在 .Net Framework 上构建 HTTP Restful 服务而设计。
        • Web API 像 JSON 一样易于阅读和方便。
        • 支持 HTTP Like URls、请求/响应、标头、缓存和版本控制的所有功能。
        • Web API 支持许多 HTTP 动词,例如 GET、POST、PUT、DELETE 等。
        • Web API 是无状态的。
        • Web API 支持 MVC 功能(控制器、操作结果、路由、过滤器、模型绑定器、IOC 容器或依赖注入)
        • Web API 可以自托管、托管在应用程序和 IIS 上。
        • OWIN(.NET 的开放式 Web 界面)用于自托管。

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • -1:“臃肿”是一个无意义的词。此外,WCF 确实支持 REST。
          猜你喜欢
          • 2012-03-16
          • 1970-01-01
          • 2013-10-20
          • 2013-05-23
          • 2010-11-02
          • 1970-01-01
          • 2011-05-12
          • 1970-01-01
          • 2010-09-18
          相关资源
          最近更新 更多