WCF服务、Web服务和REST服务之间的区别

26

什么是WCF服务与Web服务在.net中的区别?
何时应该使用WCF,何时应该使用Web服务。REST和WCF服务是否相同?谢谢。


可能是WCF vs ASMX web service的重复问题。 - John Saunders
请花点时间搜索以前的问题。我只是输入了“WCF vs ASMX”,就在列表的顶部找到了重复的内容。 - John Saunders
7个回答

27

Web Service 是一个抽象的术语,包括了许多为分布式系统提供数据的数据提供者。也许你指的是 ASMX Web 服务,在现今的开发中已经不被广泛使用。

WCF Service 是微软对SOAP的实现。还有其他的实现方式,但自己编写并不推荐。

SOAP 是一种有状态、基于会话、基于消息的 Web 服务。如果你的服务被设计成一组复杂的动作,则很适合使用它。

REST 是一种无状态、无会话、基于资源的 Web 服务。如果你的服务被设计成访问数据并对其执行简单的 CRUD 操作,则很适合使用它。SOAP 和 REST 是相互排斥的。一个服务不能同时是两者。有一些方法可以操纵原始 WCF 使其变得符合 RESTful,但这些技术正在过时。如果你想要实现一个 RESTful 的 Web 服务,在 Microsoft 的世界里有两个主要的选择:WCF 数据服务和 ASP.NET Web API。


3
“Deprecated(弃用)”这个词用得有些过于严厉。在WCF中,一个服务可以同时使用REST和SOAP绑定方式进行暴露。 - John Saunders
2
REST架构远不止于无状态、基于资源的CRUD。其中最关键的两个组成部分是内容类型和使用超文本作为应用程序状态引擎。 - cdeszaq

9

REST 是一种架构。

WCF 是 .NET Framework 中的API,用于构建连接的面向服务的应用程序。

从前,通过 Web Service 开发的功能可以通过互联网访问,而通过 Remoting 可以在本地网络上访问相同的功能。

使用 WCF,我们不需要为使其在互联网和本地网络上可访问而开发不同的代码。只需使用绑定进行配置即可。


4
那是一个非常广泛的问题...我将只给出简要的高层次回答,并建议您进行更多的搜索,因为每个主题已经有很多文章了。但是,希望这可以为您提供正确方向的推动。
首先,通常当人们提到 WCF 服务和 Web 服务时,他们指的是较新的 WCF 约定,使服务调用相当通用(它们可以是 SOAP、REST 等),以及旧的 .asmx SOAP Web 服务方法。因此,沿着这些线路,我建议更深入地研究 WCF 和 SOAP/.ASMX 以了解 WCF 和旧版 Web 服务的区别。
至于 WCF 和 REST,它们并不相同。REST 更像一种架构,而 WCF 则是一个框架。正如我之前提到的,WCF 可以用来进行 SOAP 调用或 REST 调用。我不确定是否还能加入更多细节而不必进一步详细说明。
稍后我会找一些关于 REST 和 WCF 的好文章。个人而言,我认为甚至没有必要深入研究旧的 Web 服务调用方式(.ASMX 页面),因为 WCF 已经基本上使其过时了。然而,在努力寻找最适合您的东西的过程中,学习许多不同的皮毛技巧可能会有用。
再次强调,这是非常高层次的概述,但这些都是非常一般的主题,每个主题都有很多内容,因此希望高层次的概述能够帮助您深入研究每个主题。

有些人在说“Web Services”时指的是“ASMX”,而另一些人则使用“Web Services”来表示通用技术,并认为WCF是在.NET平台上创建Web Services的当前方式。我属于后者。另一种是“ASMX Web Services”,与“WCF Web Services”区分开来。 - John Saunders
@JohnSaunders 您是正确的,我想我是根据问题而言,因为它要求区分,所以我的思路就走了这条路。然而,您是正确的,一般来说,大多数人在提到通用技术时只是指 Web 服务。 - Justin Pihony

3

有些人在说“Web Services”时指的是“ASMX”。

而另一些人则将“Web Services”用于指代通用技术,并认为WCF是在.NET平台上创建Web Services的当前方式。这些Web Services被称为“ASMX Web Services”,与“WCF Web Services”区别开来。

“其他类型”的Web Services是一种遗留技术,只支持向后兼容。它们不应该用于新的开发项目,所以学习它们没有任何意义。

正如其他人所说,“REST”是一种架构风格,而不是一种技术。


1

Wcf: WCF是.NET Framework的一部分技术,提供了与不同分布式技术一起工作的环境,并遵循统一的编程模型。WCF创建代理,支持数据合同序列化,记录以XML格式显示。

Rest: Rest是一种体系结构风格,它说使用Web的现有功能以更有效、高效和简单的方式。动词如插入、更新和删除。Rest不能创建代理,记录以JSON格式显示。

Web Service: 托管在网站上的服务称为Web服务。Web服务支持XML序列化器。


1

WCF 是多方面的,因此我将从其最常见的用法方面进行讲解。WCF 和 REST 服务之间的一般区别集中在内容上。REST 调用通常更加以消息/文档/实体为中心(使用客户实体,查找以 M 开头的实体;使用订单实体,获取订单 12),并与 HTTP 协议相关联。WCF 倾向于更加以操作为中心(使用参数调用查找操作,使用参数调用获取操作)。WCF 也不局限于 HTTP。

顺便说一下,有扩展可以使用 WCF 创建基于 REST 的服务(WebInvoke、WebGet 属性)。


WCF和REST之间的最大区别在于一个是框架,一个是架构。因此,真正比较这两者变得更加困难。这甚至涉及到为什么WCF可以用于创建RESTful服务的核心原因,因为框架可以用于实现架构。 - Justin Pihony
你在这里真正比较的是SOAP和REST。 - Raymond Saltrelli
我知道这更多涉及SOAP和REST,因此“就其最常见的用法而言”,这是针对SOAP服务的。问题听起来有点像是来自一个新手,但理解WCF 101级别的概念,并且不想给他带来太大压力。 - Rich

0

我看到这是一个相当旧的帖子,但我最近问了一个类似的问题。

给出的答案都有相似的相关性,但在我看来,Ray最接近实际要求。 在设计或重构基于Web的解决方案时,您总是会遇到这样的问题:我们应该使用SOAP还是REST。答案取决于服务所需的业务逻辑的复杂性。REST适用于简单的API调用,通常包含请求的小数据集或大量数据集的过夜处理,但主要用于数据请求。 SOAP更多地是具有业务逻辑的交互式日常服务。例如许多带有大量参数的方法。

作为我们基于Web的解决方案的一部分,我们尝试利用两者。对于内部方法和主要功能,我们使用SOAP,但对于暴露的API,我们更喜欢REST。 与框架相关,无论是SOAP还是REST,WCF都是首选。


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