连接开发世界的桥梁——WCF
王翔
全国海关信息中心,高级架构师
:
时至今日,企业环境下的开发资源被渐渐吸附到一个基于服务的开发的范畴之中,无论是Web应用、移动和嵌入式应用、传统桌面应用、后台信息服务还是遗留系统都渐渐显露出互通、互联的需要,俯视来看这些应用只不过是另一个层次上的一个个中间件。新的问题再次摆在架构师们的案头——如何在这些应用的高层视图上穿针引线,把自己内部、合作方、公共商业服务、客户应用编织为一个有机的具有连贯计算能力的信息实体?
回答这个问题并不轻松,时间跨度上要考虑企业近1、2十年的信息化建设积累,技术跨度上要照顾到多种应用类型的特点。此外,更需要慎重的是如何保证互联起来的新实体在分布式计算过程中“可靠”,而仅仅“可靠”一项就最少要涉及到如下方面:
l 数据交换过程的安全性
l 计算主体、客体的实体认证
l 可能的大容量数据交换效率
l 跨不同信任域、不同网络限制后的相互连通性
l 多个宏观应用级“原子”操作协调后的事务性
虽然看起来SOA给出了答案——设计和使用服务,但他只是一个概念,必须使用具体的开发技术填充才能够真正为企业信息化建设所用,WCF(Windows Communication Foundation)就是微软对面向服务互联系统开发给出的答案,它提供统一的、可用于建立安全可靠的面向服务的应用开发平台,主要特点如下:
l 统一了微软现有的各种分布式技术
l 基于类型实体属性(Attribute)的开发和扩展,以这种“即时贴”的编码方式区分不同逻辑间的分工
l 与现有的微软组件技术兼容,同时以 WS-*的协议为范本,调用异构平台的服务
l 开发、部署过程以配置为中心
(注:本文所提及的“服务”均指W3C所定义的“服务提供者完成一组工作,为服务使用者交付所需的最终结果。最终结果通常会使使用者的状态发生变化,但也可能使提供者的状态改变,或者双方都产生变化”。)
问题定义:
下图是WCF的一个典型的应用情形,它抽象了微软以往远程组件的调用过程,将COM+、MSMQ、ASP.Net Web Service、.Net Remoting、相关技术作为调用过程的具体实现层,配合WS-*相关标准协议定义各种面向服务企业开发的技术特性,开发人员仅仅需要将注意力集中在业务逻辑部分,具体实现层的选择只需要根据现场运行环境通过修改配置文件完成。

图:WCF整体应用情形
从架构上看,WCF自身就是个复杂的层次型系统:
l 最下层它依赖于各种既有组件技术完成远程调用
l 随后,通过抽象出一个统一的消息机制用以屏蔽掉具体通信机制对于信息编码和表示上的不同,同时根据具体数据协议的要求进行主要针对消息头部的操作,例如:在WS-Security协议下通过消息头操作进行消息源、消息主体的认证
l 接着是一个服务运行框架层,可以说这个部分是WCF中调度和协调的部分,他提供了抽象化服务职能(Contract)与具体消息(Message)实体关联后执行所需要的众多企业应特性的支持。包括吞吐量控制、服务异常处理、事务控制等等。概念上可以类比的参考COM+中DTC、TCP/IP协议栈中的TCP层、J2EE的EJB容器,可以说正因为有了这一层的保证才使得WCF可以被作为一个系统层面的面向企业级应用开发的框架。
l 之上是对整个面向服务系统各个方面定义的抽象层,通过基于XSD(W3C XML Schema)描述相关行为的执行参数,这样整个WCF平台被建立在一个平台无关、开发技术无关的XML世界中,它确保WCF可以在各个服务层面上互联起不同的应用。

图:WCF的总体逻辑架构