【问题标题】:REST in WCF for non dot.NET clients用于非 dot.NET 客户端的 WCF 中的 REST
【发布时间】:2014-01-13 11:06:10
【问题描述】:
我已经阅读了很多关于 REST 和 SOAP 之间差异的文章。我只总结几行,如果有错请告诉我。
SOAP 是一种使用 HTTP、TCP 等传输消息的协议,而 REST 仅使用 HTTP 传输消息。
SOAP 仅以 XML 格式传输消息,而 REST 使用 JSON 或 XML。
REST 不涉及与 SOAP 相同的流量开销(因为 SOAP 涉及复杂的 XML WSDL 生成)。
我听说 WCF 是为了提供互操作性而开发的。我在 .net 中开发了 REST 服务,客户端是移动设备(不是 .net 客户端)。这个我已经测试并上线了。
话虽如此,我的问题是……
是否有人开发了基本的httpbinding WCF 服务并将其提供给非.net 客户端(如Java、移动设备等)以使其具有互操作性?非 .net 客户端是否可以使用 REST 以外的 WCF?
【问题讨论】:
标签:
wcf
web-services
rest
soap
wcf-binding
【解决方案1】:
是的,您可以使用任何类型的 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 信封不是那么大)。
是否有人开发了基本的httpbinding WCF 服务并将其提供给Java、移动设备等非.net 客户端以使其具有互操作性?非 .net 客户端是否可以使用 REST 以外的 WCF?
这就是 Web 服务(SOAP 或 RESTful)的理念,可以从任何类型的客户端调用。这是两台机器之间的一种通信方式。机器的实现无关紧要(Java、C#、PHP、Python 等)。
WCF 是一个 Web 服务框架,可以将服务公开为 SOAP 或 REST API。它可以从任何类型的客户端调用。
【解决方案2】:
我认为你误解了一些基本点。
REST 和 SOAP 都是通过 HTTP 播放的 Web 服务协议。我认为你不应该关心 HTTP、TCP 或 UDP,因为它们是较低级别的协议......
SOAP 将所有内容包装在一个 XML 信封中,这会增加一些流量开销。这就是为什么 SOAP 被认为性能更差但更正式,因此更适合某些用途的原因。
SOAP 和 REST 都独立于它们实现的平台
因此,是的,您可以使用任何类型的 REST 或 SOAP 客户端来使用在 .NET 上实现的 REST 或 SOAP 服务。您还应该知道,您可以使用 WCF 实现您的 Web 服务功能,并通过更改一些 configuration options 来更改 SOAP 和 REST 之间的端点
.
希望我能帮上忙!
【解决方案3】:
是的,可以为非 .net 客户端使用除 Rest 之外的 WCF 服务。 WCF 基本上允许您创建 Web 服务。 Web 服务的目的是提供跨平台功能。
Rest 和 Soap 都是 Web 服务,但用途不同。
这取决于您的要求,您想使用哪一个。
Rest 仅适用于 http 协议,可以通过 URI 轻松调用,也可以通过 URL 进行 CRUD 操作。也可以从网络浏览器调用。
但是soap也支持跨平台通信,但是想要使用soap的客户端必须要有soap工具包的支持。不能从浏览器调用。现在几乎所有的语言都支持 SOAP api。
您使用 basichttpbinding 公开的服务是基于肥皂的服务,是的,它也可以从非 .net 客户端调用。
【解决方案4】:
使用 web apis 而不是 wcf 服务来获取 rest 方法。