9

我即将开始一个项目,我们有一个后端服务来进行冗长的处理,以便我们的 ASP.NET 网站可以自由地执行更快的请求。因此,我一直在阅读 WCF 和 Web API 等服务,以了解它们的功能。由于这个后端服务实际上将由多个相互通信的服务组成,并且不会对我们的客户公开可用,因此 WCF 似乎是这种场景的理想技术。

但是在做了很多研究之后,我仍然对 WCF 和 Web API 之间的好处和区别感到困惑。总的来说,似乎:

  • 如果您想要一个公共和/或 RESTful API,那么 Web API 是最好的
  • WCF 可以支持比 HTTP 更多的传输,因此您可以对它们进行更多控制
  • 由于 WCF 的附加功能/复杂性,Web API 开发似乎比 WCF 更容易

但也许我的问题归结为以下几点:

  1. 为什么 REST 服务会更有益呢?一个完整的 WCF 服务对于公共 API 来说会是一个好主意吗?还是 WCF 服务可以提供 Web API 无法提供的任何东西?
  2. 相反,如果我有许多需要相互通信的内部服务,并且很乐意只使用 HTTP 作为传输,那么 Web API 会突然成为一个可行的选择吗?
4

3 回答 3

10

我回答了几个相关的问题:

作为附加资源,我建议您阅读:

http://www.codeproject.com/Articles/341414/WCF-or-ASP-NET-Web-APIs-My-two-cents-on-the-subjec

如果您想了解有关 REST 的更多信息,请查看这篇 Martin Fowler 文章

总结:

据我所知,这两种技术都是由微软的同一个团队开发的,WCF 不会停产,它仍然是一种选择(例如,如果你想提高服务的性能,你可以公开它们通过 TCP 或命名管道)。未来显然是 Web API

  • WCF 是为与 SOAP 一起工作而构建的

  • Web API 是为使用 HTTP 而构建的

为了做出正确的选择:

  • 如果您的意图是创建支持特殊场景的服务——单向消息传递、消息队列、双工通信等,那么您最好选择 WCF
  • 如果您想创建可以在可用时使用快速传输通道的服务,例如 TCP、命名管道,甚至可能是 UDP(在 WCF 4.5 中),并且您还希望在所有其他传输不可用时支持 HTTP,那么您就是最好使用 WCF 并同时使用基于 SOAP 的绑定和 WebHttp 绑定。
  • 如果你想通过 HTTP 创建可以使用 HTTP 全部功能的面向资源的服务——使用 ETags 定义浏览器的缓存控制、版本控制和并发,传递各种内容类型,如图像、文档、HTML 页面等,使用 URI 模板要在您的响应中包含任务 URI,那么新的 Web API 是您的最佳选择。
  • 如果你想创建一个多目标服务,它既可以用作 HTTP 上的面向资源的服务,也可以用作 TCP 上的 RPC 样式的 SOAP 服务——请先跟我谈谈,我会给你一些建议。
于 2012-08-22T09:12:42.137 回答
1

WCF 的一大亮点是需要在服务中的输入和/或输出模型发生变化时生成新的客户端代理。REST 服务不需要代理,客户端只需更改发送的查询字符串或更改以解析和/或使用不同的输出。

我发现 .Net 中的默认 JSON 序列化程序有点慢,我实现了http://json.codeplex.com/来进行入站和输出序列化。

WCF 服务并不复杂,REST 服务同样具有挑战性,因为您在 HTTP 的范围内工作。

于 2012-08-22T10:44:30.763 回答
0

ASP.net Web API 是关于基于 HTTP 和 REST 的 GET、POST、PUT、DELETE 以及众所周知的 ASP.net MVC 编程风格和 JSON 可返回;Web API 适用于所有轻量级进程和纯 HTTP 组件。对于一个继续使用 WCF 的人来说,即使是简单或最简单的单一 Web 服务,它也会带来所有额外的包袱。对于 ajax 或动态调用的轻量级简单服务,WebApi 总是能解决需求。这巧妙地补充或有助于与 ASP.net MVC 并行。查看播客:Hanselminutes Podcast 264 - 这不是你父亲的 WCF - 关于 WebAPI 与Scott Hanselman 的 Glenn Block 的更多信息。

于 2012-10-25T04:49:16.633 回答