WCF作为具有最小可能负载的Web服务

时间:2009-03-26 03:39:56

标签: .net wcf web-services api rest

我最近使用Microsoft技术完成了大部分工作,所以很自然地我会查看WCF提供的内容。它似乎非常灵活,是.Net远程处理的下一步,但它似乎与SOAP消息非常相关,而且对于平台无关的Web服务应用程序而言相当笨拙。我不是这项技术的专家,但我想他们所宣传的所有这些灵活性意味着你可以摆脱SOAP消息并返回你想要的任何数据结构/格式。这是真的还是假的?

我说这个的原因是,如果我真的想将应用程序创建为REST服务,那么我的一个目标平台就是移动设备。不仅如此,任何基于Web的服务的一个重要目标是保持数据有效负载小,无论是拨号速度的移动设备还是完整的桌面应用程序。

所以,如果你把Twitter的api作为一个例子,它已经取得了令人难以置信的成功,因为你可以请求数据为JSON,没有花哨的SOAP信封来减重数据并接收最少量的字节来表示你想要的数据。因此,在连接较差且消耗Twitter数据的设备上运行的移动应用程序可以使用尽可能少的带宽。除此之外,Twitter,Facebook或任何更成功的公共API的模式是JSON和/或XML中的自定义数据结构,而不是包装在SOAP信封中(虽然我可能是错的......这只是我的印象)。

你如何在WCF中做到这一点?你是否必须通过箍告诉WCF“只返回这个文本......不要担心SOAP信封”,还是一个简单的配置选项?

3 个答案:

答案 0 :(得分:2)

WCF RESTful POX, JSON and SOAP Coexist。实际上,配置WCF以返回简单的POX和/或JSON非常简单。

答案 1 :(得分:2)

您可以设置几个配置选项以从WCF中删除SOAP。最简单的方法是使用WebServiceHost而不是通常的ServiceHost类来托管您的服务。它设置了您想要的大多数选项。贾斯汀史密斯有good post that contrasts WebServiceHost and ServiceHost

虽然听起来好像您更担心发送一些REST原则(URL映射和HTTP方法)的POX(普通旧XML)有效负载,但您可能会发现Jon Flander的RESTful .NET书很有帮助。这是一个overview of Chapter 1

另请查看Microsoft的REST Starter Kit,其中有很多关于如何使用WCF执行常见的面向Web的任务的示例。

为了回答你问题的另一部分,我发现使用JSON会产生比XML更小的有效载荷,同时在WCF中仍然有相当的支持。

答案 2 :(得分:1)