我是WCF RESTFull服务开发的新手,我正在寻找一些有用的信息以及与新的WCF Web API http://wcf.codeplex.com/相比使用webHttpBinding的经验反馈。
我正在寻找的是了解webHttpBinding的缺点,以及为什么要使用新的Web api,特别是新API解决的问题。 如果你能指点我一些博客文章比较他们或只是谈论使用webHttpBinding时的问题我会很感激。提前谢谢。
答案 0 :(得分:22)
我要说的主要缺点是webhttpbinding使得处理HTTP特定问题变得困难。如果您所做的只是通过HTTP传递一个对象,该对象被序列化为XML或JSON并且可以通过不同的格式传输,那么它的效果很好。
HTTP不仅仅是XML和JSON的简单传输协议,它是一种具有丰富语义的应用层协议。 Web API专门针对那些希望通过HTTP构建系统的人,这些人可以充分利用HTTP的丰富性。
Web API支持HTTP资源可以根据不同客户端的需求进行多种表示。频谱的一端可能是一个愚蠢的浏览器,只使用Form url编码的帖子和GET与服务对话,而另一端可能是使用Atom / OData或基于超媒体的媒体类型的更富客户端。
Web API包含其他HTTP特定问题,如conneg,etags等,可以更好地利用中间Web服务器。
Web API在设计时考虑了更多可测试性,因此您可以以更可测试的方式处理HTTP消息或其他问题。
Web API具有更简化的配置故事。
您可以在此处详细了解相关理由: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。我认为这是一个很好的选择,因为它符合现有解决方案的风格,并最大限度地减少了所需的更改量。