WCF与以往的分布式技术有何区别?
在上篇文章 WCF从理论到实践一:揭开神秘面纱 中曾经阐述过WCF的前生今世,说的比较概括,本文详细的说明WCF和以往的分布式技术的区别,目的是让大家更详细的了解WcF的应用场合,为日后系统的架构作铺垫。首先先看下面这张对比表格
WCF与其他分布式技术对比表
Xml Web Service |
.Net Remoting |
Enterprice Service |
WSE |
MSMQ |
WCF | |
跨平台 |
√ |
√ | ||||
.Net与.Net通讯 |
√ |
√ | ||||
分布式事务 |
√ |
√ | ||||
安全可靠性 |
√ |
√ | ||||
消息队列 |
√ |
√ |
上面的表格参考了Bruchzhang文章中的对比图,原文地址: http://www.cnblogs.com/wayfarer/archive/2006/04/05/367474.html
从表格中我们可以看出,WCF似乎等于前面几项技术之和,但事实并非如此,它既整合了原来的多项技术,而且拥有着自己得天独厚的优点,如下:
-
统一性(Integration)
-
互操作性
-
安全可靠(Secure and Reliable)
-
兼容性
WCF 在安全性方面做了哪些改进?
为了保证数据通讯的安全,WCF提供了三种保护措施:1)机密性(Confidentiality)2)完整性(Integrity) 3)可验证性(Authentication),这三种措施联合起来被称为CIA。并且这些措施在WCF中是默认支持的。机密性能保证传输的数据是经过加密的,不被非法监听(eavesdrop),而完整性利用数字签名技术防止数据在传输过程中被注入(injected)或篡改(tampered),而验证(Authentication)可以采用灵活的策略来处理达到的客户端请求,比如用户名密码验证,客户端证书验证等。为了显示WCF在安全性方面的特点和优点,我制作了演示程序:Security_Compare方案,这个方案主要通过对比wcf和xml web service的消息来表现wcf在安全方面的改进,工程清单如下:
ProjectName(项目名称) |
Remark(备注) |
Wcf |
WCF的服务端程序,默认创建,功能未经修改 |
WcfClient |
WCF程序的客户端,用于调用Wcf |
WebService |
Xml Web Service服务程序,完成功能和Wcf一样 |
WsClient |
是Xml Web Service的客户端,用于调用WebService |
为了跟踪Web Service和WCF的消息,我们还需要了解一下两个工具:
-
Microsoft SOAP Toolkit Version 3 中的 Trace Utility
-
tcpTrace
原来一直用Trace Utilty来跟踪xml web service的消息报文,非常好用,它能按包显示出Soap信息,看起来也非常方便。有关它的消息,请从http://www.microsoft.com/downloads/details.aspx?FamilyId=C943C0DD-CEEC-4088-9753-86F052EC8450&displaylang=en 上下载SOAP Toolkit 3.0,安装后,便出现了这个工具,在跟踪xml web service的消息报文的时候,这个工具很好用,但跟踪wcf的报文却不行,能截获到数据,但每个报文都是空的,可能也和wcf报文是经过加密的有关系吧, 搜索了一下,在artech的blog中发现这么一篇文章:[原创]我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace,解决了我不能跟踪wcf消息报文的难题,他也提到Trace Utilty不能跟踪wcf,同时建议大家使用tcpTrace,并且说明了使用方法,对tcpTrace不熟悉的同学可以到他的blog上学习,很实用,我在这里就不再赘述。
经过我的跟踪,我分别将Xml web Service的消息log到ws.txt中,将wcf的消息log到wcf.txt中,您可以从下面的本文相关文件下载中获取这两个文件,观察二者在消息上的不同。用于演示的示例解决方案您也在相关文件下载中获得。
WCF在性能方面有那些改进?
大家都知道,越复杂,结构层次越多的框架一般效率也越低,WCF是以往其他分布式技术的集成者,它结构相对复杂,且由于默认支持安全传输,在性能上应该不如Xml Web Service技术,更不用和.Net Remoting等比较,这是一个有框架设计经验和架构师们都明白的简单道理,但是事实怎么样呢?wcf比xml web service性能到底是高还是底,低要低多少?这些问题很值得大家的研究和讨论,其实已经有人在此方面做了很详细的对比,msdn上便有一篇专门介绍此方面知识的文章: WCF Performance Comparison ,对wcf性能感兴趣的同学,可以到这文章中学习。很详尽。限于条件的限制,我这里只在我一台机器上作一个简单的对比,仅供参考。分别测试循环1000次对wcf和xml web service相同功能方法的调用,得到如下的数据:
WCF |
Web Service | |
第一次 |
9523ms |
7561ms |
第二次 |
9480ms |
7465ms |
第三次 |
9508ms |
7708ms |
第四次 |
9487ms |
7900ms |
经过四次测试数据,我们可以得出,wcf的性能和xml web service相比的确要低,但差别不大,肯定在一个数量级之上。有关测试性能的解决方案Perfermence_Compare您能在相关文件下载中获得。
WCF开发模型和以往的其他分布式技术有何区别?
WCF不仅仅在功能上集成了以往的分布式开发技术,而且在编程模型中充分吸取原来技术的优点,如xml web service的声明性编程(declareable),和.net remoting中的配置(configuration)和wse中的安全策略声明性配置方法,这样wcf虽然功能强大,而且学习简单,便于推广。在vs2008中还集成了WCF Test Client,开发服务的时候,甚至不需要再开发测试客户端就能用WCF Test Client来进行调用,简单之极,示例程序更是无需更改以行代码,便可以运行。
上面这些是说了wse编程的简单易学性,我总结出来,主要包括以下几种特性
- 基于声明性编程模型
- 充分利用配置来实现框架的灵活。
-
使用配置的同时,仍保留代码编程的模型,使得框架更加丰富,便于控制。
-
默认的CIA支持,极大地简化了安全控制
相关示例文件
-
安全对比示例解决方案Security_Compare: /Files/jillzhang/Security_Compare.rar
-
跟踪soap消息的工具tcpTrace: /Files/jillzhang/tcpTrace.rar
-
安全对比示例跟踪结果: /Files/jillzhang/wcf.txt , /Files/jillzhang/ws.txt
-
性能测试解决方案Perfermence_Compare: /Files/jillzhang/Perfermence_Compare.rar
示例程序和本文对比测试的平台依据
windows xp sp2 + visual studio.net 2008 rtm