一什么是WCF? 根据微软官方的解释WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架它使得开发者能够建立一个跨平台的安全可信赖事务性的解决方案且能与已有系统兼容协作WCF是微软分布式应用程序开发的集大成者它整合了Net平台下所有的和分布式系统有关的技术例如Net RemotingASMXWSE和MSMQ以通信(Communiation)范围而论它可以跨进程跨机器跨子网企业网乃至于Internet以宿主程序而论可以以ASPNETEXEWPFWindows FormsNT ServiceCOM+作为宿主(Host)WCF可以支持的协议包括TCPHTTP跨进程以及自定义安全模式则包括SAMLKerberosX用户/密码自定义等多种标准与模式也就是说在WCF框架下开发基于SOA的分布式系统变得容易了微软将所有与此相关的技术要素都包含在内掌握了WCF就相当于掌握了叩开SOA大门的钥匙 WCF是建立在Net Framework 基础之上的包含在NET /当中中并没有包含WCF但是当安装好了WinFX Runtime Components后我们就可以在Visual Studio 环境下开发和创建WCF的程序了 WCF是微软重点介绍的产品因此也推出了专门的官方网站()该网站有最新的WCF新闻发布以及介绍WCF的技术文档和样例代码 二WCF的优势 在David Chappell所撰的《Introducing Windows Communication Foundation》一文中用了一个活鲜鲜的例子来说明WCF的优势所在假定我们要为一家汽车租赁公司开发一个新的应用程序用于租车预约服务该租车预约服务会被多种应用程序访问包括呼叫中心(Call Center)基于JEE的租车预约服务以及合作伙伴的应用程序(Partner Application)如图所示 )thiswidth=;>图 呼叫中心运行在Windows平台下是在Net Framework下开发的应用程序用户为公司员工由于该汽车租赁公司兼并了另外一家租赁公司该公司原有的汽车预约服务应用程序是JEE应用程序运行在非Windows操作系统下呼叫中心和已有的汽车预约应用程序都运行在Intranet环境下合作伙伴的应用程序可能会运行在各种平台下这些合作伙伴包括旅行社航空公司等等他们会通过Internet来访问汽车预约服务实现对汽车的租用 这样一个案例是一个典型的分布式应用系统如果没有WCF利用Net现有的技术应该如何开发呢? 首先考虑呼叫中心它和我们要开发的汽车预约服务一样都是基于Net Framework的应用程序呼叫中心对于系统的性能要求较高在这样的前提下Net Remoting是最佳的实现技术它能够高性能的实现Net与Net之间的通信 要实现与已有的JEE汽车预约应用程序之间的通信只有基于SOAP的Web Service可以实现此种目的它保证了跨平台的通信而合作伙伴由于是通过Internet来访问利用ASPNet Web Service即ASMX也是较为合理的选择它保证了跨网络的通信由于涉及到网络之间的通信我们还要充分考虑通信的安全性利用WSE(Web Service Enhancements)可以为ASMX提供安全的保证 一个好的系统除了要保证访问和管理的安全高性能同时还要保证系统的可信赖性因此事务处理是企业应用必须考虑的因素对于汽车预约服务而言同样如此在Net中Enterprise Service(COM+)提供了对事务的支持其中还包括分布式事务(Distributed Transactions)不过对于Enterprise Service而言它仅支持有限的几种通信协议 如果还要考虑到异步调用脱机连接断点连接等功能我们还需要应用MSMQ(Mcrosoft Message Queuing)利用消息队列支持应用程序之间的消息传递 如此看来要建立一个好的汽车租赁预约服务系统需要用到的Net分布式技术包括Net RemotingWeb ServiceCOM+等五种技术这既不利于开发者的开发也加大了程序的维护难度和开发成本正是因应于这样的缺陷WCF才会在Net 中作为全新的分布式开发技术被微软强势推出它整合了上述所属的分布式技术成为了理想的分布式开发的解决之道下图展示了WCF与之前的相关技术的比较 cellSpacing= borderColorLight=# borderColorDark=#ffffff bgColor=#ddddd align=center>image onmousewheel=javascript:return big(this) src=http://imgeducitycn/img_///jpg onload=javascript:if(thiswidth>)thiswidth=;>图 从功能的角度来看WCF完全可以看作是ASMXNet RemotingEnterprise ServiceWSEMSMQ等技术的并集(注这种说法仅仅是从功能的角度事实上WCF远非简单的并集这样简单它是真正面向服务的产品它已经改变了通常的开发模式)因此对于上述汽车预约服务系统的例子利用WCF就可以解决包括安全可信赖互操作跨平台通信等等需求开发者再不用去分别了解Net RemotingASMX等各种技术了 概括地说WCF具有如下的优势 统一性 前面已经叙述WCF是对于ASMXNet RemotingEnterprise ServiceWSEMSMQ等技术的整合由于WCF完全是由托管代码编写因此开发WCF的应用程序与开发其它的Net应用程序没有太大的区别我们仍然可以像创建面向对象的应用程序那样利用WCF来创建面向服务的应用程序 互操作性 由于WCF最基本的通信机制是SOAP这就保证了系统之间的互操作性即使是运行不同的上下文中这种通信可以是基于Net到Net间的通信如下图所示 cellSpacing= borderColorLight=# borderColorDark=#ffffff bgColor=#ddddd align=center>image onmousewheel=javascript:return big(this) src=http://imgeducitycn/img_///jpg onload=javascript:if(thiswidth>)thiswidth=;>图可以跨进程跨机器甚至于跨平台的通信只要支持标准的Web Service例如JEE应用服务器(如WebSphereWebLogic)应用程序可以运行在Windows操作系统下也可以运行在其他的操作系统如Sun SolarisHP UnixLinux等等如下图所示 cellSpacing= borderColorLight=# borderColorDark=#ffffff bgColor=#ddddd align=center>image onmousewheel=javascript:return big(this) src=http://imgeducitycn/img_///jpg onload=javascript:if(thiswidth>)thiswidth=;>图 安全与可信赖 WSSecurityWSTrust和WSSecureConversation均被添加到SOAP消息中以用于用户认证数据完整性验证数据隐私等多种安全因素 在SOAP的header中增加了WSReliableMessaging允许可信赖的端对端通信而建立在WSCoordination和WSAtomicTransaction之上的基于SOAP格式交换的信息则支持两阶段的事务提交(twophase commit transactions) 上述的多种WSPolicy在WCF中都给与了支持对于Messaging而言SOAP是Web Service的基本协议它包含了消息头(header)和消息体(body)在消息头中定义了WSAddressing用于定位SOAP消息的地址信息同时还包含了MTOM(消息传输优化机制Message Transmission Optimization Mechanism)如图所示 cellSpacing= borderColorLight=# borderColorDark=#ffffff bgColor=#ddddd align=center>image onmousewheel=javascript:return big(this) src=http://imgeducitycn/img_///jpg onload=javascript:if(thiswidth>)thiswidth=;>图 兼容性 WCF充分的考虑到了与旧有系统的兼容性安装WCF并不会影响原有的技术如ASMX和Net Remoting即使对于WCF和ASMX而言虽然两者都使用了SOAP但基于WCF开发的应用程序仍然可以直接与ASMX进行交互 |