WCF从理论到实践(2):决战紫禁之巅


本文的出发点

通过阅读本文,能解决如下问题:

  1. WCF与以往的分布式技术有何区别?
  2. WCF 在安全性方面做了哪些改进?
  3. WCF在性能方面有那些改进?
  4. WCF开发模型和以往的其他分布式技术有何区别?

     

本文适合的读者

有过分布式开发和SOA相关实施经验的开发人员

 

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似乎等于前面几项技术之和,但事实并非如此,它既整合了原来的多项技术,而且拥有着自己得天独厚的优点,如下:  

  1. 统一性(Integration)
  2. 互操作性
  3. 安全可靠(Secure and Reliable)
  4. 兼容性


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的消息,我们还需要了解一下两个工具:

  1. Microsoft SOAP Toolkit Version 3 中的 Trace Utility
  2. 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编程的简单易学性,我总结出来,主要包括以下几种特性

  1. 基于声明性编程模型
  2. 充分利用配置来实现框架的灵活。
  3. 使用配置的同时,仍保留代码编程的模型,使得框架更加丰富,便于控制。
  4. 默认的CIA支持,极大地简化了安全控制

 

相关示例文件

  1. 安全对比示例解决方案Security_Compare: /Files/jillzhang/Security_Compare.rar
  2. 跟踪soap消息的工具tcpTrace: /Files/jillzhang/tcpTrace.rar
  3. 安全对比示例跟踪结果: /Files/jillzhang/wcf.txt  ,   /Files/jillzhang/ws.txt
  4. 性能测试解决方案Perfermence_Compare: /Files/jillzhang/Perfermence_Compare.rar

 

示例程序和本文对比测试的平台依据

windows xp sp2 + visual studio.net 2008 rtm

 

参考资料

posted @ 2008-01-26 13:16  Robin Zhang  阅读(20539)  评论(11编辑  收藏  举报