WCF(原代号为Indigo)是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的(Secure)、可靠的(Reliable)、跨平台的(transacted messaging along with interoperability)的分布式解决方案。
引子
WCF是"Windows Communication Foundation "的缩写,原来的代号为"Indigo",它是MS为SOA(Service Oriented Architecture)而设计的一套完整的技术框架。利用它能够开发出分布式(Distributed)应用程序,而且开发难度相比以前的.Net Remoting和Asp.Net Xml Web Service等都有了大幅度的降低。可以说WCF是目前微软平台下最先进的SOA框架,也是微软在今后一段时间内在该领域的主打产品。它具有很多优点,但本人总结起来,其最大的特征在于1)充分整合了原来的.Net Remoting,Asp.Net Xml Web Service,MSMQ,WSE,Enterprise Service等多项分布式技术,取其精华,弃其糟粕。2)WCF虽然整合了几项技术,但开发难度不增反降,简单易学。相信在未来的几年中,WCF一定在SOA的大潮中披荆斩棘,大展身手。本系列文章从大的方向上分为两个部分,第一部分是介绍WCF相关的理论知识,第二部分是用WCF来开发一个完整的项目实例。希望在理论和实践上和大家一起学习微软这个优秀的框架。
本文的出发点和目的
通过阅读本文,能解决以下几个问题
WCF是什么?
WCF能干什么?
WCF的今生前世?
学习WCF有哪些资源?
本文适合的读者
对WCF感兴趣的初学者,最好以前有一些SOA相关的基础常识。
WCF是什么?
比较贴近官方的说法是:WCF(原代号为Indigo)是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的(Secure)、可靠的(Reliable)、跨平台的(transacted messaging along with interoperability)的分布式解决方案。它的面向服务的编程模型整合了.Net平台下以往全部的分布式开发技术,例如.Net Remoting,Asp.Net Xml Web Service,MSMQ,WSE,和Enterprise Service等,它可以支持跨应用程序域(AppDomain),进程(Process),网络(NetWork)的进行数据通讯,而且能寄宿在诸如IIS,Windows Service,Console,Windows Application等多种宿主(Host)中。它适用于Vista,Xp和Windows 2003等操作系统。是微软在SOA领域推出的一款主打产品。有关详细介绍,请参见WCF官方主页:http://netfx3.com/content/WCFHome.aspx
WCF能干什么?
在win32中,应用程序是运行在进程(Process)的线程(Thread)中的,.Net平台出现之后,出现了AppDomain,其实就相当于在进程和线程之间又有了一层包装,类似于子进程的概念,在一个进程(或者应用程序域)中的对象能进行直接的访问和控制,但超出这个范围,便不能进行直接的访问和控制了,所以说进程(或者应用程序域)有一定的隔离作用,如果是分布在不同网络,不同操作系统上的不同进程,他们进行通讯的难度就更大,而分布式应用程序要求的就是将原本被隔离的作用域通过一定的契约联系起来,从而达成多个系统的沟通协作。当然能实现这种目的的方式远不止WCF一个,比如在win32时代,经常使用映射内存文件来实现进程之间的互操作问题,还有在windows程序中,用windows消息wm也能实现不同进程之间的通讯问题,但这些都有局限性,因为他们不能很好的解决跨平台,跨网络问题,而WCF可以。
WCF的今生前世
早在Web Service出现之前,已经有很多企业都实现了自己的EAI(Enterprise Application Integration)企业应用整合,但此时并没有被大家所公认的技术规范,所以那时的集成方案比较分散,没有统一标准,尽管有些EAI做得还比较成功,苦于没有技术规范,很难得以推广。而出现Web Service后,由于更大厂商(包括IBM,MS等)的大力支持,Soap成为大家所公认的技术规范,很快就成为了解决这一难题的制胜法宝。MS为响应这种变化,在.Net平台中推出了自身的Web Service产品,也就是Asp.Net Xml Web Service,但这个框架在通讯安全和性能等方面存在着一些难以解决的问题,虽然后来又增加了WSE来弥补不足,但整体看来,Asp.Net Xml Web Service的不足还是显而易见的。在安全方面,WSE对Xml Web Service作了很大的改进,支持ws等网络服务的安全标准,但它作为框架的扩展,最新版本3.0还在beta阶段,而且这个扩展框架鲜为人知,服务端如果使用了WSE,那也要求客户端使用,而由于这个框架没有被广泛的推广,很可能给对客户端开发人员增加开发和部署难度。在性能方面,.Net Remoting技术相比Web Service略有优势,但学起来有一定难度,最要命的是它不能实现跨平台的操作,一个用.Net Remoting写的Service很难用Java来调用,这就使得其实用性大打折扣,MSMQ支持消息队列,但需要整合在其他系统之中,传统的Enterprise Service支持分布式事务,但同样没有Web Service的跨平台特性。此时,WCF应运而生,它整合了MS历来最优秀的分布式系统开发技术,取其精华,弃其糟粕,是分布式应用程开发技术的集大成者,它解决了跨平台的问题,同时支持安全通讯和分布式事务。由于其简单易学,在推广上也必然比较顺利,可以说WCF将开辟分布式开发技术的一个新纪元,其影响应该不在当年Web Service之下。