问:WCF 为开发人员提供了哪些 ASMX 2.0 和 WSE 3.0 所没有的功能?
答:ASMX 2.0 和 WSE 3.0 提供了许多重要功能,但某些开发人员错误地认为这些功能只属于 WCF。例如,它们的堆栈都提供了类似的基于属性的编程模型,其中,您可以根据 .NET 接口定义编写服务协定(参见本专栏的第一个问题和解答)。它们的堆栈都提供与传输方式无关的 SOAP 实现,可以随附多个传输信道和自定义传输挂钩。它们的堆栈都允许在任何基于 Windows 的应用程序中承载服务(通过 WSE 中的 SOAPReceivers 或 WCF 中的 ServiceHost)。它们的堆栈都提供多个消息编码方式,包括两个最广泛受支持的编码方式:XML 1.0 和消息传输优化机制 (MTOM)。它们的堆栈都支持基于消息的安全性,并且可通过简单的配置元素进行配置(能够立即启用的安全性配置文件)。图 4 中的表格总结了堆栈的比较方式。
| Feature | ASMX 2 .0 plus WSE 3. 0 | WCF |
|---|---|---|
| Hosting | IIS/ASP.NET (.asmx) SoapReceivers |
IIS/ASP.NET (.svc) ServiceHost<T> WAS |
| Programming Model | [WebService], [WebMethod], and so on (supports interfaces, generics, and the like) | [ServiceContract], [OperationContract], and so on (supports interfaces, generics, and so on) |
| Message Exchange Patterns (MEP) | One-way Request-response Custom (using WSE API) |
One-way Request-response First/last-operation Duplex Custom |
| XML Serialization | System.Xml .Serialization |
System.Runtime .Serialization System.Xml.Serialization (you can choose) |
| Encodings | XML 1.0 MTOM DIME Custom |
XML 1.0 MTOM Binary Custom |
| Transports | HTTP TCP Custom |
HTTP TCP Named pipes MSMQ P2P Custom |
| Protocols | Security | Security Reliable messaging Transactions |
| Behaviors (enabled via attributes or configuration | Local DTC transactions HTTP buffering HTTP caching HTTP sessions Custom (via SoapExtensions, WSE filters) |
Concurrency Instancing Throttling Thread-binding Exception handling and faults Impersonation Session management Transaction behaviors Custom (via behavior types) |
堆栈的主要不同之处在于它们对各种 WS-* 规范的支持。WSE 3.0 仅支持安全框架,而 WCF 支持安全框架、可靠消息处理框架和事务框架。如表格所示,WCF 还提供更多的本地处理行为和自定义挂钩。实际上,WCF 对象模型中的每一层都可以通过代码、属性或配置进行扩展。
最终,WCF 提供更完整的开发框架,该框架是围绕各种 Web 服务协议从头开始设计的。现在,如果使用 ASMX 2.0 和 WSE 3.0,您仍然可以获得非常类似的体验。此外,未来迁移的前景也很看好。
