WCF Web Api与WebHttpBinding

时间:2011-03-14 09:43:27

标签: wcf webhttpbinding wcf-web-api

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

我正在寻找的是了解webHttpBinding的缺点,以及为什么要使用新的Web api,特别是新API解决的问题。 如果你能指点我一些博客文章比较他们或只是谈论使用webHttpBinding时的问题我会很感激。提前谢谢。

4 个答案:

答案 0 :(得分:22)

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

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

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

  2. Web API包含其他HTTP特定问题,如conneg,etags等,可以更好地利用中间Web服务器。

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

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

  5. 您可以在此处详细了解相关理由:http://blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-web-apis-http-your-way.aspx

答案 1 :(得分:4)

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

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

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

Web API提供基于REST的REST 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。我认为这是一个很好的选择,因为它符合现有解决方案的风格,并最大限度地减少了所需的更改量。