WCF、Rest和SOAP之间有什么关系?

70
WCF和REST&SOAP之间有什么关系?WCF是基于这些技术之一(REST或SOAP)还是一种独立的技术?
4个回答

157

WCF是用于构建分布式系统的消息框架。分布式系统通常就是指Web服务。

这意味着您可以使用C#(或任何.NET语言)编写方法,然后应用一堆配置来使您的代码对其他人可访问,并将您的代码转化为Web服务。

"一堆配置"就是WCF。如果您围绕您的C#代码设置WCF配置以将其公开为RESTful服务,则可以使用WCF将您的方法公开给其他计算机或应用程序。或者,您也可以轻松地使用SOAP协议提供相同的C#方法。

如果您有一个名为“GetData()”的方法,您可以设置WCF配置来使该方法在托管在IIS中的服务中可用。当有人调用该服务时,他们可以向http://www.yourdomain.com/SomeService/GetData发送一个HTTP GET请求,并且GetData方法将接收该消息并发送回响应。当您通过HTTP进行GET请求时,您正在使用REST。 REST几乎与HTTP作为传输协议绑定在一起。 REST也没有标准消息格式。您可以在HTTP消息中发送任何想要发送的内容以及任何您希望发送的方式。您可以发送XML、JSON或纯文本。您还可以使用POST、GET或PUT等HTTP动词。
使用SOAP,您的消息可以使用任何传输协议发送到服务 - 您不必绑定HTTP。 SOAP消息旨在是传输中立的。它们以XML编码,并且XML始终具有头和主体节点,在一个信封节点内。围绕SOAP有许多Web标准 - 例如将安全性,会话和其他功能放入消息头中的标准。此外,使用SOAP,您会获得WSDL,我这里不会进行解释,但它使客户端更容易对其进行编程。大多数编程语言都有一种方法,可以将WSDL转换为强类型的方法和对象,以便轻松调用您的服务。
REST在互联网上非常流行,并且与互联网一样可扩展(即非常可扩展)。SOAP在企业间应用程序中非常流行。

5
我认为您的回答是最好的。 - Angela Marie-Daley
1
数据通信在互联网流行之前就已经存在,然而年轻的开发人员会将数据通信与互联网联系起来(例如,“分布式系统基本上只是另一个词汇表示网络服务”)。分布式系统在互联网流行之前就已经存在,并且可以在没有互联网的情况下存在。我认为WCF不需要“网络”,如果是这样的话,那么这个描述是误导性的。 - Sam Hobbs
2
有点晚了,但是我想澄清一下,SOAP协议并不总是有头部的,因为它是可选的。 - Bauss
这必须被选为问题的答案。 - Murat Yıldız
我同意这是更好的答案。但愿有一种方式可以发起投票或其他方式来将其更改为被接受的答案。 - Mike C.

33
我会翻译中文。WCF不自动支持REST或SOAP,但你可以让它支持这两种方式。你需要一个教程来实现。WCF是一种用于编程的技术。

http://www.codeproject.com/Articles/406096/A-beginners-tutorial-for-understanding-Windows

REST

http://rest.elkstein.org/

以下是其他有趣的内容:

WCF - REST / SOAP

https://msdn.microsoft.com/en-us/library/hh323708(v=vs.100).aspx

WCF和REST

https://msdn.microsoft.com/en-us/library/ee391967.aspx

或者你可以自己使用谷歌/必应/元搜索引擎/Altavista进行搜索......


那么,WCF是一种独立于Web服务技术的技术,而Web服务技术包括REST和SOAP作为变体,这是真的吗? - user1460819
2
根据我的经验,WCF 与 Web 服务是同义词。在工作中,我们可能会将其称为 WCF Web 服务。关于 WCF 的事情是它支持 REST 和 SOAP 两种方式,这取决于您如何编写服务。WCF 只涉及 ABC(地址、绑定、协定),在我提供的链接中有更好的解释。 - Mike C.
只是想确认一下WCF教程是否使用SOAP或REST? - Joshua Duxbury
1
@JoshLeeDucks 说实话,我不确定。如果我必须猜测的话,我会说它可能使用SOAP,但我必须运行实际代码才能确定。这里要强调的是,WCF并不局限于SOAP或REST,它可以使用任何一种。我会在链接中添加一篇我发现的有趣文章。 - Mike C.

10

来自MSDN

WCF编程模型提供了各种功能,例如SOAP服务、Web HTTP服务、数据服务、丰富的互联网应用程序(RIA)服务和工作流服务。SOAP服务支持使用Java、其他平台构建的系统以及使用Microsoft®支持的消息标准的系统之间的互操作性。SOAP服务还支持传输,如HTTP、TCP、命名管道和MSMQ。Web HTTP服务和数据服务都支持REST。Web HTTP服务使您能够控制服务位置、请求和响应格式和协议。数据服务使您能够将数据模型和数据驱动逻辑公开为服务。WCF还包括两个编程模型:服务模型和通道模型。服务模型提供定义数据契约、服务契约和服务行为的框架。通道模型支持指定格式、传输和协议。

SOAP和REST服务都可以为Web应用程序提供功能,并且都可以用于在Web的分布式环境中交换信息,它们各自具有优点和局限性。


那是一个重要的区别,其他帖子没有提到(尽管其他帖子同样重要):“SOAP服务支持互操作性...” - Thomas
我想知道为什么会这样。JAVA服务不能使用基于RESTful的方法进行通信吗? - Thomas

8

虽然这个问题已经得到了几个很好的答案,但我想加入我的两分钱,为新手们在理解 WCFvsSOAPvsREST-full服务方面提供一些帮助。

我们会有疑惑:WCF是否支持RESTSOAP通常,我们只看到 SOAPREST 的通用定义。因此,我们需要一些来自微软的东西来让我们感受到真相:)所以这里是来自 Microsoft MSDN 的截图:

MSDN article URLenter image description here

所以,是的,WCF支持两种。

与OP相关:

  • SOAP服务:
    在WCF编程模型中,支持与Java、其他平台构建的系统以及使用Microsoft®支持的消息标准的系统之间的互操作性。这些还支持HTTP、TCP、命名管道和MSMQ等传输。
  • Web HTTP服务:
    在WCF编程模型中支持REST。[来源:MSDN]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接