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

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

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

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

ASMX和WCF的另一个比较可以在这里find – 我不完全同意所有的观点,但它可能会给你一个想法。

WCF基本上是“ASMX上的立体声” – 它可以是ASMX可以 – 再加上更多!

ASMX是:

  • 简单易用的写入和configuration
  • 只在IIS中可用
  • 只能从HTTP调用

WCF可以是:

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

简而言之:WCF在这里完全取代ASMX。

查看MSDN上的WCF开发人员中心 。

更新:链接似乎死了 – 试试这个: 什么是Windows通信基础?

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

其次,ASMXnetworking服务不灵活。 但是,WCF服务是灵活的。 如果你制作一个新版本的服务,那么你只需要公开一个新的结束。 因此,服务是敏捷的,这是一个非常实用的方法来看待当前的业务趋势。

我们将WCF作为契约,接口,操作和数据契约进行开发。 作为开发人员,我们更关注业务逻辑服务,不必担心通道堆栈。 WCF是任何一种服务的统一编程API,所以我们创build服务并使用configuration信息来build立像HTTP / TCP / MSMQ等通信机制

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

ASMX Web服务已准备就绪,只要添加文件即可添加为web服务参考。 (假设您的项目build立)

对于create webservice的简单开发stream程 – > run webservice – > add webservice reference ,一个ASMX webservice几乎没有什么可以出错,没有太多的你可以错误configuration,这是它的实力。

为了回应那些认为WCF取代ASMX的消息,我会回复说WCF需要添加一个简化的KISSconfiguration模式,以便完全取代ASMX。

ASMX webservice的示例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 Web服务。 ASMX是做Web服务的老方法,WCF是目前做Web服务的方式。 所有新的SOAP Web服务开发,在客户端或服务器上,都应该使用WCF来完成。

关于通过WCF的asmx Web服务的简单性,有很多谈判正在进行。 让我在这里澄清几点。

  • 新手web服务开发人员很容易就可以轻松地开始使用asmx web服务。 Visual Studio为他们完成所有工作,并随时创build一个Hello World项目。
  • 但是,如果你可以学习WCF(当然不需要太多的时间),那么你可以看到,WCF也很简单,你可以轻松地继续。
  • 重要的是要记住,这些在WCF中的复杂性实际上归因于它带来的美丽特征。 有configuration文件中提到的寻址,绑定,契约和端点,服务和客户端。 美是你的业务逻辑是分离和保持安全。 明天,如果你需要改变从basicHttpBindingnetTcpBinding的绑定,你可以很容易地在configuration文件中创build一个绑定并使用它。 因此,所有与客户,沟通渠道,绑定等相关的变化都将在configuration中完成,从而保证业务逻辑的安全性和完整性,这是非常有意义的。
  • WCF“Web服务”是通过WCF实现的更广泛的远程通信的一部分。 在WCF中执行事务的灵活性和可移植性要高于传统的ASMX,因为WCF从头开始devise来总结Microsoft提供的所有不同的分布式编程基础结构。 WCF中的一个端点可以通过SOAP / XML轻松地进行通信,因为它可以通过TCP /二进制文件进行通信,并且更改此介质只是一个configuration文件mod。 从理论上讲,这可以减less移植或改变业务需求,目标等时所需的新代码的数量。
  • Web服务只能通过HTTP访问,它可以在无状态的环境中工作,WCF是灵活的,因为它的服务可以托pipe在不同types的应用程序中。 您可以在控制台,Windows服务,IIS和WAS中托pipe您的WCF服务,这也是在Visual Studio中创build新项目的不同方式。
  • ASMX早于WCF,任何ASMX都可以这样做可以WCF(和更多)。 基本上你可以看到WCF试图在逻辑上将所有不同的方式组合在一起,让两个应用程序在微软的世界中进行交stream; ASMX只是其中的一种方式,所以现在归入WCF的能力范围之内。
  • 您将一直喜欢使用Visual Studio for .NET 4.0或4.5,因为它在创buildWCF服务时使生活变得轻松。
  • 主要区别在于Web服务使用XmlSerializer。 但是,与XmlSerializer相比,WCF使用性能更好的DataContractSerializer。 这就是为什么WCF比.NET等其他通信技术相比更好的方式,比如asmx,.NET remoting等等。

不要忘记,我是那些比WCF更喜欢asmx服务的人之一,但是那个时候我不太了解WCF服务及其function。 我害怕WCFconfiguration。 但是我敢于尝试写一些我自己的WCF服务,当我学到了更多的WCF时,现在我对WCF没有什么限制,我推荐给任何人和每个人。 快乐编码!