40

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

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

4

7 回答 7

23

我对此进行了更多阅读,并在此找到了 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)
  • 基于代码的配置
  • 自托管
于 2012-02-26T09:50:15.290 回答
15

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

我假设您知道 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 的那部分,我们应该这样做。严格来说,不,我认为您永远不会在 asp.net mvc* 中找到 WebGet/WebInvoke,它只是不适合。

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

于 2012-02-26T07:45:35.437 回答
14

看起来 WCF 本身正在以某种方式消亡,或者至少变得不那么重要了,因此它在其功能集中投入的开发工作也少了很多。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。

于 2012-02-26T13:10:51.857 回答
9

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 现在是 ASP.NET Web API
  2. CodePlex:Daniel Roth 谈 WCF 的未来
  3. Chanel9:Dan Roth 谈新的 ASP.NET Web API
于 2012-11-22T01:00:45.823 回答
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。

于 2013-12-20T16:24:06.067 回答
1

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

网络服务

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

WCF

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

网络 API(网络 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 界面)用于自托管。
于 2015-08-18T06:14:05.673 回答
0

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

于 2013-10-10T15:07:58.403 回答