18

我是 WCF RESTFull 服务开发的新手,与新的 WCF Web API http://wcf.codeplex.com/相比,我正在寻找一些有用的信息以及关于使用 webHttpBinding 的经验反馈。

我正在寻找的是了解 webHttpBinding 的缺点以及为什么要使用新的 Web api,尤其是新的 API 解决了哪些问题。如果您可以向我指出一些比较它们的博客文章,或者只是谈论使用 webHttpBinding 时的问题,我将不胜感激。先感谢您。

4

4 回答 4

22

我想说的主要缺点是 webhttpbinding 很难处理 HTTP 特定的问题。如果您所做的只是通过 HTTP 传递一个对象,该对象被序列化为 XML 或 JSON,并且可以通过不同的格式传输,那么它会非常有用。

HTTP 不仅仅是一个简单的 XML 和 JSON 传输协议,它是一个具有丰富语义的应用层协议。Web API 专门针对希望通过 HTTP 构建系统以充分利用 HTTP 的丰富性的人们。

  1. Web API 包含 HTTP 资源可以根据不同客户端的需求具有多种表示形式。频谱的一端可能是一个愚蠢的浏览器,它只使用表单 url 编码的帖子和 GET 与服务对话,而另一端可能是使用 Atom/OData 或基于超媒体的媒体类型的更丰富的客户端。

  2. Web API 包含其他 HTTP 特定问题,例如 conneg、etags 等,它们允许更好地利用中间 Web 服务器。

  3. Web API 在设计时考虑了更多的可测试性,因此您可以以更可测试的方式处理 HTTP 消息或其他问题。

  4. Web API 有一个更简化的配置故事。

您可以在此处阅读有关基本原理的更多信息:http: //blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-web-apis-http-your-way.aspx

于 2011-03-14T20:25:42.983 回答
4

对我来说最显着的区别是编程模型的变化。您不再编写公开绑定到 HTTP 习惯用法(GET、POST 等)的“操作”的“服务”。使用 Web API,您可以创建客户端可以与之交互的“资源”(POCO)。

Web API 似乎更擅长处理各种自定义媒体类型(例如 PNG 图像)。

最后但同样重要的是,Web API 更适合自动化测试。例如,您不再需要使用静态上下文类来访问响应代码等 HTTP 概念。您使用 POCO 请求和响应类,它们可以使用旧式 new() 运算符在自动化测试中轻松实例化。

我同意 Ladislav 的观点,即 Web API 现在只是一个预览版,在它之上构建应用程序可能既危险又被许可协议禁止(但我没有检查过)。

你考虑过@serialseb 的 OpenRasta 吗?它是稳定的,并为构建 RESTful 服务提供了非常好的编程模型。

于 2011-03-14T14:39:06.163 回答
2

Web API 类似于 WCF 中 REST 开发的可能未来。它只是预览版,在最终发布之前可能会发生重大变化(可能在 .NET 框架的下一版本中)。因此,如果您想构建生产 REST 服务,您应该使用 webHttpBinding。

例如,可以在.NET Connected Framework 团队的博客和您提到的网站上找到有关 Web Api 的可用信息。它是当前 REST API 的简化和扩展。

于 2011-03-14T09:59:47.443 回答
0

Web API 提供了一个 REST 友好的基于 HTTP 的 API。Web API 使用 MVC 的模式,对于 ASP.NET MVC 开发人员来说将非常熟悉。Web API 可以利用 HTTP 作为应用层协议的功能,根据客户端的请求标头以多种表示形式(XML、JSON、HTML 等)返回资源。

另一方面,WCF webHttpBinding 使用 WCF 的模式,并且将更吸引 WCF 开发人员 - ServiceContracts、OperationContracts、全面(或超重,取决于您如何看待它,配置文件)、在外部自托管的能力IIS。

我喜欢 Web API 的一件事是能够使用动态类型来摆脱类型系统的约束。我也喜欢 Web API 中的默认异常行为 - 对比 WCF webHttpBinding,默认情况下,异常冒泡为 HTTP 500 + HTML 有效负载(yuk!)。

很高兴在这里可以在两种出色的技术之间进行选择。我不会将 Web API 描述为比 WCF“更新”或“更好”,因为这意味着它是一种替代技术,并且 WCF webHttpBinding 是遗留的,我不相信这是真的。

我最近选择使用 WCF webHttpBinding 来为现有的 WCF SOAP 服务公开 JSON API。我相信这是一个不错的选择,因为它符合现有解决方案的风格,并最大限度地减少了所需的更改量。

于 2013-10-21T21:07:59.617 回答