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

  • 常规讨论

  • 本文的出发点

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

    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开发模型和以往的其他分布式技术有何区别?

    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

     

    参考资料

    经过四次测试数据,我们可以得出,wcf的性能和xml web service相比的确要低,但差别不大,肯定在一个数量级之上。有关测试性能的解决方案Perfermence_Compare您能在相关文件下载中获得。

    2009年6月30日 8:45