WCF中的REST用于非dot.NET客户端

时间:2013-12-25 14:38:45

标签: wcf web-services rest soap wcf-binding

我已经阅读了很多关于REST和SOAP之间差异的文章。我将简要总结一下,如果有错误,请告诉我。

  1. SOAP是一种使用HTTP,TCP等传输消息的协议,但REST仅使用HTTP传输消息。

  2. SOAP仅以XML格式传输消息,但REST使用JSON或XML。

  3. REST不涉及与SOAP相同的流量开销(因为SOAP涉及复杂的XML WSDL生成)。

  4. 我读过WCF是为了提供互操作性而开发的。我在.net中开发了REST服务,客户端是移动设备(不是.net客户端)。这个我已经测试并上线了。

    话虽如此,我的问题是......

    是否有人开发了basichttpbinding WCF服务并将其提供给非 .net客户端,如Java,移动设备等,以使其可互操作?非.net客户端是否可以使用除REST之外的 WCF

4 个答案:

答案 0 :(得分:4)

我认为你误解了一些基本观点。

  1. REST和SOAP都是通过HTTP播放的Web服务协议。我认为你不应该关心HTTP,TCP或UDP,因为它们是较低级别的协议......

  2. SOAP将所有内容包装在XML信封中,这会产生一些流量开销。这就是为什么SOAP被认为性能更差但更正式,因此更适合某些用途。

  3. SOAP和REST都独立于它们实现的平台

  4. 因此,是的,您可以使用任何类型的REST或SOAP客户端来使用在.NET上实现的REST或SOAP服务。您还应该知道可以使用WCF实现Web服务功能,只需更改一些configuration options即可在SOAP和REST之间更改端点

    希望我帮忙!

答案 1 :(得分:4)

是的,您可以使用任何类型的SOAP或REST客户端使用WCF服务。

  

SOAP是一种使用HTTP,TCP等传输消息的协议,但REST仅使用HTTP来传输消息。

这个问题过于宽泛,无法回答“是”或“否”。与您的问题严格相关,我们对SOAP有这些特征:

  • SOAP是一种协议;
  • SOAP消息可以通过HTTP,TCP,SMTP等发送(实际上是任何协议)。 SOAP是在另一个传输协议之上使用的消息传递协议;
  • 最常用的SOAP协议是HTTP和HTTPS;

现在REST的特性:

  • REST是构建应用程序的架构风格;
  • REST实际上并不绑定到HTTP协议,它可以使用任何传输协议;
  • 每个人都使用HTTP和HTTPS进行REST;
  

SOAP仅以XML格式传输消息,但REST使用JSON或XML。

SOAP只能发送XML消息,它是协议的一部分。实际上,您需要使用包含Envelope,Header和Body标记的XML的特定格式。

REST是关于资源的表示。表示可以具有任何结构,可以是任何格式,而不仅仅是XML或JSON(尽管XML和JSON是最常用的);

  

REST不涉及与SOAP相同的流量开销(因为SOAP涉及复杂的XML WSDL生成)。

WSDL不涉及实际的操作调用,它与描述SOAP Web服务是分开的。 REST具有类似(虽然不是很常用)的类似WADL的东西。您需要使用SOAP和REST对数据进行编组/解组,因此开销大部分时间都不是问题(SOAP信封不是那么大)。

  

有没有人开发过basichttpbinding WCF服务并将其提供给非.net客户端,如Java,移动设备等,以使其可互操作?非.net客户端是否可以使用除REST以外的WCF?

这是从任何类型的客户端调用Web服务(SOAP或RESTful)的想法。这是两台机器之间的通信方法。机器的实现并不重要(Java,C#,PHP,Python等)。

WCF是一种Web服务框架,可以将服务公开为SOAP或REST API。它可以从任何类型的客户端调用。

答案 2 :(得分:3)

是的,对于非.net客户端,可以使用Rest之外的WCF服务。 WCF基本上允许您创建Web服务。 Web服务的目的是提供跨平台功能。

Rest和Soap都是Web服务,但用途不同。 这取决于您的要求您要使用哪一个。 Rest仅适用于http协议,可以通过URI轻松调用,也可以通过URL执行CRUD操作。它也可以从Web浏览器调用。

然而,soap也支持跨平台通信,但想要使用soap的客户端必须支持soap toolkit。它无法从浏览器调用。现在几乎每种语言都支持SOAP api。

使用basichttpbinding公开的服务是基于soap的服务,是的,它也可以从非.net客户端调用。

答案 3 :(得分:0)

使用web apis而不是wcf服务进行休息。

相关问题