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

我完全搞不清WCF和ASMX web服务。在我的早期阶段,我使用了很多web服务,现在引入了这个叫做WCF的新东西。我仍然可以创建作为web服务功能的WCF。我想WCF里会有更多的东西。

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

360845 次浏览

WCF完全取代了ASMX web服务。ASMX是做web服务的旧方法,WCF是做web服务的当前方法。在客户机或服务器上,所有新的SOAP web服务开发都应该使用WCF。

ASMX Web服务只能由HTTP(使用. ASMX的传统Web服务)调用。而WCF服务或WCF组件可以被任何协议(如http、tcp等)和任何传输类型调用。

第二,ASMX web服务不灵活。然而,WCF服务是灵活的。如果您创建了一个新版本的服务,那么您只需要公开一个新端。因此,服务是敏捷的,这是考虑当前业务趋势的一种非常实用的方法。

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

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通信基金会?

这是一个非常老的问题,但我认为ASMX的好处没有得到公平的描述。虽然不是很灵活,但ASMX web服务非常易于使用和理解。虽然WCF更加灵活,但它的建立和配置也更加复杂。

只要您添加文件,ASMX web服务就可以作为web服务引用进行添加。(假设您的项目构建完成)

用于简单的开发工作流 create webservice -> run webservice -> add webservice reference, ASMX webservice很少会出错,很少会配置错误,这就是它的优点

对于那些断言WCF取代ASMX的人,我的回答是,WCF需要添加一个精简的K.I.S.S.配置模式,以便完全取代ASMX。

示例web。ASMX web服务的配置:

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

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

  • 的确,web服务开发新手可以很容易地开始使用asmx web服务。Visual Studio为它们完成了所有工作,并随时创建Hello World项目。
  • 但是如果你能学会WCF(当然不会花太多时间),那么你就会发现WCF也很简单,你可以很容易地继续下去。
  • 重要的是要记住,WCF中的这些复杂性实际上归因于它带来的漂亮特性。有寻址、绑定、契约和端点、服务等;客户端都在配置文件中提到。美妙之处在于您的业务逻辑被安全地隔离和维护。明天如果你需要将绑定从basicHttpBinding更改为netTcpBinding,你可以很容易地在配置文件中创建一个绑定并使用它。因此,所有与客户端、通信通道、绑定等相关的更改都要在配置中完成,而业务逻辑是安全的。完好无损,这很有道理。
  • WCF“web服务”是通过WCF实现的更广泛的远程通信的一部分。与传统的ASMX相比,在WCF中做事可以获得更高程度的灵活性和可移植性,因为WCF的设计从头到尾总结了微软提供的所有不同的分布式编程基础设施。WCF中的端点可以像在TCP/二进制上一样通过SOAP/XML轻松地进行通信,并且更改这种介质只需要一个配置文件mod。理论上,这减少了移植或更改业务需求、目标等时所需的新代码量。
  • Web服务只能通过HTTP访问。它工作在无状态环境中,WCF是灵活的,因为它的服务可以托管在不同类型的应用程序中。您可以在控制台,Windows服务,IIS &WAS,这也是在Visual Studio中创建新项目的不同方式。
  • ASMX比WCF更古老,任何ASMX可以做到的事情都可以做到WCF(甚至更多)。基本上,你可以把WCF看作是在微软世界中,把两个应用之间通信的所有不同方式逻辑地组合在一起;ASMX只是众多方法中的一种,所以现在被归到WCF的功能保护伞下。
  • 你总是喜欢使用Visual Studio for NET 4.0或4.5,因为它使创建WCF服务变得简单。
  • 主要的区别是Web服务使用XmlSerializer。但是WCF使用DataContractSerializer,与XmlSerializer相比,它的性能更好。这就是为什么WCF比。net的其他通信技术(如asmx、。net remoting等)表现得更好。
不要忘记,我是那些喜欢asmx服务胜过WCF的人之一,但那时我不太了解WCF服务及其功能。我很害怕WCF配置。但是我敢于尝试写一些我自己的WCF服务,当我了解更多的WCF,现在我对WCF没有任何顾虑,我推荐给任何人&每一个人。 编码快乐! !< / p >