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

时间:2010-03-15 15:52:28

标签: wcf web-services asmx

我在WCF和ASMX Web服务之间完全混淆。我在早期阶段使用了很多Web服务,现在引入了一个名为WCF的新东西。我仍然可以创建作为Web服务的WCF。我认为WCF会有更多东西。

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

5 个答案:

答案 0 :(得分:385)

基思·埃尔德在这里很好地比较了ASMX to WCF。看看吧。

ASMX和WCF的另一个比较可能是found here - 我不是100%同意那里的所有观点,但它可能会给你一个想法。

WCF基本上是“ASMX on stereoids” - 它可以是ASMX所能做到的 - 加上更多!

ASMX是:

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

WCF可以是:

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

简而言之:WCF将完全取代ASMX。

查看WCF Developer Center on MSDN

更新:链接似乎已经死了 - 试试这个:What Is Windows Communication Foundation?

答案 1 :(得分:37)

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

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

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

答案 2 :(得分:23)

这是一个非常古老的问题,但我并不认为ASMX的好处已经得到了相当的描述。虽然不是非常灵活,但ASMX Web服务使用和理解起来非常简单。虽然WCF更灵活,但站起来和配置也更复杂。

ASMX Web服务随时可以站起来,并在添加文件后立即添加为Web服务引用。 (假设你的项目建立)

对于简单的开发工作流程 create webservice - > run webservice - > add webservice reference,一个ASMX网络服务几乎没有什么可以出错,没有多少你可能会错误配置,这就是它的优势。

为了回应那些断言WCF取代ASMX的人,我会回复说WCF需要添加一个简化的K.I.S.S.配置模式,以完全取代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>

答案 3 :(得分:11)

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

答案 4 :(得分:5)

关于通过WCF实现asmx Web服务的简单性,已经进行了很多讨论。我在这里澄清几点。

  • 新手Web服务开发人员可以轻松地在asmx Web服务中轻松上手。 Visual Studio为他们完成所有工作,并轻松创建Hello World项目。
  • 但是如果你可以学习WCF(当然不会花费太多时间)那么你可以看到WCF也很简单,你可以轻松地继续。
  • 重要的是要记住,WCF中的这些复杂性实际上归因于它带来的美丽特征。有寻址,绑定,合同和端点,服务&amp;配置文件中提到的所有客户端。美丽是您的业务逻辑被隔离和安全维护。明天,如果您需要将绑定从 basicHttpBinding 更改为 netTcpBinding ,您可以轻松地在配置文件中创建绑定并使用它。因此,所有与客户端,通信通道,绑定等相关的更改都将在配置中完成,从而使业务逻辑安全无缺。完好无损,这真的很有意义。
  • WCF&#34;网络服务&#34;是通过WCF实现的更广泛的远程通信的一部分。与传统的ASMX相比,您将在WCF中获得更高程度的灵活性和可移植性,因为WCF是从头开始设计的,用于总结Microsoft提供的所有不同的分布式编程基础架构。 WCF中的端点可以通过SOAP / XML与TCP /二进制文件一样轻松地进行通信,并且更改此介质只是一个配置文件mod。从理论上讲,这可以减少移植或更改业务需求,目标等所需的新代码量。
  • 只能通过HTTP访问Web服务。它在无状态环境中工作,WCF非常灵活,因为它的服务可以托管在不同类型的应用程序中。您可以在控制台,Windows服务,IIS和Linux中托管您的WCF服务。 WAS,这也是在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没有任何限制,我向任何人推荐它们。大家。 快乐的编码!!!