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

sha*_*esh 373 wcf web-services asmx

我对WCF和ASMX Web服务感到困惑.我在早期阶段使用了很多Web服务,现在引入了一个名为WCF的新东西.我仍然可以创建作为Web服务的WCF.我认为WCF会有更多东西.

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

mar*_*c_s 390

Keith Elder 在这里很好地将ASMX与WCF进行了比较.看看这个.

ASMX和WCF的另一个比较可以在这里找到 - 我不是100%同意那里的所有要点,但它可能会给你一个想法.

WCF基本上是"ASMX on stereoids" - 它可以是ASMX所能做到的 - 还有更多!.

ASMX是:

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

WCF可以是:

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

简而言之:WCF完全取代ASMX.

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

更新:链接似乎已经死了 - 试试这个:什么是Windows Communication Foundation?

  • 使用visual studio 2010 .net 4.0 WCF和ASMX一样容易编写,没有理由再写ASMX了.WCF更快,更灵活,更安全.ASMX是遗产,没有人应该写它的时期. (15认同)
  • "大多数开发人员错误地认为ASMX需要IIS;毕竟,这是他们见过的唯一用例.但事实是,ASMX对IIS没有任何技术依赖性." http://msdn.microsoft.com/en-us/magazine/cc163879.aspx (13认同)
  • @MrNick:对.没有IIS,但仍然只有HTTP,并将托管ASMX的代码与托管WCF服务的代码进行比较. (2认同)
  • 不幸的是,链接 http://keithelder.net/2008/10/17/wcf-vs-asmx-webservices/ 已损坏。 (2认同)
  • @codemonkeyliketab:回复是**超过6岁** - 互联网时代的光年!我试图找到WCF开发人员中心的替代品 - 请参阅我的更新 (2认同)

NET*_*rts 37

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

其次,ASMX Web服务不灵活.但是,WCF服务非常灵活.如果您制作新版本的服务,则需要公开新的结束.因此,服务是敏捷的,这是一种非常实用的方法,可以查看当前的业务趋势.

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

  • 也许只是我,但段落#2和#3作为营销学士学位脱颖而出. (8认同)

And*_*man 24

这是一个非常古老的问题,但我并不认为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>
Run Code Online (Sandbox Code Playgroud)

  • @ Coder1409这肯定是更多的配置,因为有些东西需要配置.绑定,可发现性等.asmx中不需要.服务合同,运营合同,数据合同,数据成员.在asmx中没有必要.当然,这些都是为什么wcf优越且功能强大的原因,但是否认它增加复杂性只是不诚实.它可以说没有缺点. (7认同)
  • 我创建了一个wcf的第一个(第二个,第三个......)时间花了我很长时间才弄清楚所需的配置."为什么我需要那样做?" 我一直在问自己."为什么要这么复杂的事情呢?" asmx立即工作.所以说它就是这么简单并不是真的.有一天,我将完全理解并改变我的观点 - 直到那天GRRRR! (6认同)

Joh*_*ers 11

WCF完全取代ASMX Web服务.ASMX是执行Web服务的旧方法,WCF是当前的Web服务方式.客户端或服务器上的所有新SOAP Web服务开发都应使用WCF完成.

  • "WCF并不复杂"哈.告诉我overbloated web.config. (57认同)
  • 麻烦的是,虽然ASMX是一个简单的模型(意思不是非常灵活),但它是一个简单的模型(意味着易于使用和理解最常见的Web服务需求).WCF增加了许多额外的复杂性.虽然MS希望用WCF取代ASMX,但在MS使最常见的场景像旧的[Webmethod]方式一样简单之前,似乎有一点阻力. (32认同)
  • (不是一个downvoter,但我会告诉你为什么) - 因为"这是新的,那是旧的"并不是任何人都应该关心的重大差异.我们不会仅根据它们的年龄来选择工具 - 锤子真的很老,但它仍然是大多数时候用于驱动指甲的最佳工具.所以,你提供了一个有效的答案,它只是没有用 - 就像旧的"你在飞机上"的笑话. (25认同)
  • WCF并不复杂.在两者中创建一个简单的"hello world"Web服务,并查看每个代码中编写的代码量.答案:两者都不多,而且在WCF中只是稍微多一点.而且,BTW,ASMX已经被WCF所取代.木已成舟. (6认同)
  • @ mattmc3:你显然没有看过.NET 4中的WCF. (5认同)
  • 投票 - 没有参考.你怎么知道这些信息?是意见吗?你在微软工作吗?添加参考,我将投票. (4认同)

Sag*_*der 6

关于基于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 /二进制文件一样轻松地进行通信,并且更改此介质只是一个配置文件mod.从理论上讲,这可以减少移植或更改业务需求,目标等所需的新代码量.
  • Web服务只能通过HTTP访问,它可以在无状态环境中工作,WCF非常灵活,因为它的服务可以托管在不同类型的应用程序中.您可以在控制台,Windows服务,IIS和WAS中托管WCF服务,这也是在Visual Studio中创建新项目的不同方式.
  • ASMX比WCF旧,ASMX可以执行的任何操作都可以是WCF(以及更多).基本上你可以看到WCF试图将所有不同的方式组合在一起,让两个应用程序在微软世界中进行通信; ASMX只是众多方式中的一种,因此现在归入WCF的功能范围.
  • 您总是希望使用Visual Studio for .NET 4.0或4.5,因为它可以在创建WCF服务时简化生活.
  • 主要区别在于Web Services使用XmlSerializer.但是WCF使用DataContractSerializer,与XmlSerializer相比,它在性能上更好.这就是为什么WCF比.NET中的其他通信技术(如asmx,.NET远程处理等)表现更好的原因.

不要忘记我是那些比WCF更喜欢asmx服务的人之一,但那次我并不了解WCF服务及其功能.我害怕WCF配置.但我敢于尝试自己编写一些WCF服务,当我学到更多WCF时,现在我对WCF没有任何限制,我向所有人推荐它们.快乐的编码!