WCF和ASMX Web服务之间有什么区别?


375

我对WCF和ASMX Web服务完全感到困惑。在我的早期阶段,我已经使用了很多Web服务,现在引入了一个称为WCF的新事物。我仍然可以创建充当Web服务的WCF。我认为WCF中会有更多内容。

WCF和Web服务之间有什么区别?什么时候应该使用每个?


5
这绝对不是一个推荐问题。ASMX和WCF都不是产品。它们是Microsoft堆栈中Web服务的两次迭代。问题是有什么区别,值得学习新的吗?这与“我应该使用Telerik控件还是Infragistics。”
John Saunders

Answers:


391

Keith Elder 在这里很好地比较了ASMX和WCF。一探究竟。

您可以在此处找到 ASMX和WCF的另一个比较-我不是100%同意那里的所有观点,但是它可能会给您一个想法。

WCF基本上是“类固醇上的ASMX”-它可以是ASMX可以做的所有-还有更多!

ASMX是:

  • 易于编写和配置
  • 仅在IIS中可用
  • 只能从HTTP调用

WCF可以是:

  • 托管在IIS,Windows服务,Winforms应用程序,控制台应用程序中-您完全有自由
  • 与HTTP(REST和SOAP),TCP / IP,MSMQ和许多其他协议一起使用

简而言之:WCF在这里可以完全替代ASMX。

在MSDN上查看WCF开发人员中心

更新:链接似乎已失效-尝试以下操作:什么是Windows Communication Foundation?


15
使用Visual Studio 2010 .net 4.0,WCF就像ASMX一样容易编写,不再有任何理由来编写ASMX。WCF更快,更灵活,更安全。ASMX是传统的,没有人应该写它的期限。
汤姆·斯蒂克

13
“大多数开发人员错误地认为ASMX需要IIS;毕竟,这是他们见过的唯一用例。但事实是,ASMX对IIS没有任何技术依赖性。” msdn.microsoft.com/en-us/magazine/cc163879.aspx
MrNick

2
@MrNick:对。没有IIS,但仍然只有HTTP,然后将用于托管ASMX的代码与用于托管WCF服务的代码进行比较。
约翰·桑德斯

1
不幸的是,链接keithelder.net/2008/10/17/wcf-vs-asmx-webservices断开了。
罗伯特

2
@codemonkeyliketab:响应已超过6年 -互联网时代已经过去了!我试图找到WCF开发人员中心的替代者-请参阅我的更新
marc_s,

37

ASMX Web服务只能由HTTP(带有.asmx的传统Web服务)调用。虽然WCF服务或WCF组件可以由任何协议(例如http,tcp等)和任何传输类型调用。

其次,ASMX Web服务不灵活。但是,WCF服务是灵活的。如果您制作了该服务的新版本,则只需公开一个新的结局。因此,服务是敏捷的,并且从当前的业务趋势来看这是一种非常实用的方法。

我们将WCF开发为合同,接口,操作和数据合同。作为开发人员,我们更加专注于业务逻辑服务,而不必担心通道堆栈。WCF是适用于任何类型服务的统一编程API,因此我们创建服务并使用配置信息来建立HTTP / TCP / MSMQ等通信机制


11
也许只有我一个人,但是第2段和第3段作为营销BS脱颖而出。
Neolisk

@Net Experts您说“如果您制作该服务的新版本,那么您只需要公开一个新的结局”,您在说什么?
谅解

@Mou,他的意思是公开一个新的endpoint猜测。像<endpoint address="http://api.microsofttranslator.com/V1/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService1" contract="TranslatorService.LanguageService" name="BasicHttpBinding_LanguageService3" />
AlexMelw'17

25

这是一个非常老的问题,但是我认为ASMX的好处并未得到充分体现。虽然不是十分灵活,但是ASMX Web服务非常易于使用和理解。尽管WCF更加灵活,但站起来和配置起来也更加复杂。

添加文件后,ASMX Web服务就可以站起来并添加为Web服务参考。(假设您的项目构建)

对于create webservice-> run webservice-> 的简单开发工作流程 add webservice reference,ASMX Web服务几乎没有什么可能出错,没有太多可以配置错误的地方,这就是优点。

为了回应那些断言WCF替代ASMX的人,我将回答WCF需要添加简化的KISS配置模式以完全替代ASMX。

ASMX Web服务的示例web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <system.web>
    <compilation targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
</configuration>

我认为WCF不需要为使用asmx webservices可以完成的工作进行更多的配置,并且您也可以在客户端为WCF服务添加引用,WCF比asmx功能强大,它可以完成asmx的功能做到,它将和asmx一样简单
Coder1409

9
@ Coder1409肯定是更多配置,因为需要配置一些东西。绑定,可发现性等。在asmx中不是必需的。服务合同,运营合同,数据合同,数据成员。在asmx中不是必需的。当然,这些就是为什么wcf更出色,更强大的原因,但是否认它增加了复杂性只是不诚实。可以说没有不利因素。
Andrew Hoffman 2015年

7
我第一次(第二,第三...)创建wcf时,我花了很长时间才弄清楚所需的配置。“为什么我需要这样做?” 我一直问自己。“为什么要打扰这么复杂的东西?” asmx只是立即工作。因此,说它是如此简单并不正确。有一天,我将完全理解并改变我的观点-直到那天GRRRR !!!
tomjm 2015年

1
@tomjm再次尝试使用现代版本的Visual Studio和.NET。除其他外,配置系统已更改为默认的更多设置。特别是,您几乎不需要指定URL就可以获取简单的Web服务(仅http)且没有功能。
约翰·桑德斯

1
@tomjm好吧,很高兴知道。老实说,它过去是如此多的配置,以至于可以使用wcf config manager应用程序。它可以做的一切!(除了开箱即用的一些好的默认设置),但是如今我们更简单地考虑WEB服务。Wcf仍然适用于高级服务,但是..多数服务开发可能是webservice开发,因此对于webservice开发imo很难击败webapi2。
安德鲁·霍夫曼

10

WCF完全替代了ASMX Web服务。ASMX是做Web服务的旧方法,而WCF是做Web服务的当前方法。客户端或服务器上所有新的SOAP Web服务开发都应使用WCF完成。


32
问题是,虽然ASMX是一个简单的模型(意味着不十分灵活),但它却是一个简单的模型(意味着对于最常见的Web服务需求易于使用和理解)。WCF增加了很多额外的复杂性。尽管MS希望用WCF替换ASMX,但在MS使最常见的场景像旧的[Webmethod]方法一样简单之前,似乎存在一些抵制。
mattmc3 2010年

6
WCF一点也不复杂。在两者中创建一个简单的“ hello world” Web服务,并查看每个中编写了多少代码。答案:两者都不多,而WCF仅略多。而且,顺便说一句,ASMX已经已经被替换为WCF。木已成舟。
约翰·桑德斯

58
“ WCF一点也不复杂”哈。告诉我,这让web.config显得过分膨胀。
mattmc3 2011年

26
(不是拒绝投票的人,但是我会告诉你原因)-因为“这是新的而又旧的”并不是任何人都应该关注的重大差异。我们不会仅根据工具的年龄​​来选择工具-锤子确实非常古老,但在大多数情况下,它仍然是钉子钉钉的最佳工具。因此,您给出了一个有效的答案,但这并没有帮助-就像古老的“您在飞机上”的笑话一样。
茉莉花

5
下投-没有参考。您怎么知道这些信息?有意见吗?你在微软工作吗?添加参考,我将投票。
tomjm 2015年

7

关于WCF上的asmx Web服务的简单性,有很多讨论。让我在这里澄清几点。

  • 的确,新手Web服务开发人员将可以轻松地开始使用asmx Web服务。Visual Studio将为他们完成所有工作,并轻松创建一个Hello World项目。
  • 但是,如果您可以学习WCF(这当然不会花很多时间),那么您会发现WCF也很简单,并且可以轻松进行。
  • 重要的是要记住,WCF中的上述复杂性实际上归因于它带来的精美功能。配置文件中提到了所有寻址,绑定,合同和端点,服务和客户端。美丽之处在于您的业务逻辑被安全地隔离和维护。明天,如果您需要将绑定从basicHttpBinding更改为netTcpBinding,则可以轻松地在配置文件中创建绑定并使用它。因此,所有与客户端,通信通道,绑定等相关的更改都将在配置中完成,而业务逻辑保持安全完整,这是很有意义的。
  • WCF“ Web服务”是通过WCF启用的更广泛的远程通信范围的一部分。与通过传统的ASMX相比,在WCF中处理事务的灵活性和可移植性要高得多,因为WCF从头开始设计为概述Microsoft提供的所有不同的分布式编程基础结构。WCF中的端点可以通过SOAP / XML进行通信,就像通过TCP / binary一样容易地进行通信,而更改此媒体仅是配置文件mod。从理论上讲,这减少了在移植或更改业务需求,目标等时所需的新代码量。
  • Web服务只能通过HTTP进行访问,并且可以在无状态环境中使用,因为WCF可以在不同类型的应用程序中托管,因此WCF十分灵活。您可以将WCF服务托管在控制台,Windows服务,IIS和WAS中,这又是在Visual Studio中创建新项目的不同方法。
  • ASMX比WCF古老,而ASMX可以做到的一切都可以使WCF(以及更多)实现。基本上,您可以看到WCF试图在逻辑上将Microsoft应用程序中使两个应用程序进行通信的所有不同方式组合在一起;ASMX只是众多方式中的一种,因此现在被归类为WCF的功能范围。
  • 您将始终喜欢使用Visual Studio for NET 4.0或4.5,因为它在创建WCF服务时使生活变得轻松。
  • 主要区别在于Web服务使用XmlSerializer。但是WCF使用的DataContractSerializer与XmlSerializer相比在性能上更好。这就是为什么WCF的性能比.NET的其他通信技术同行更好的方式,例如asmx,.NET远程处理等。

不要忘了我是比WCF更喜欢asmx服务的人之一,但是那时候我对WCF服务及其功能并不了解。我很害怕WCF配置。但是我敢于尝试编写自己的WCF服务,当我了解了更多WCF知识后,现在我对WCF毫无拘束了,我推荐给任何人和所有人。编码愉快!!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.