引用《WCF服务编程》里的一段话:“以WCF为基础框架搭建面向服务的企业级应用程序,以WF工作流引擎支撑企业应用中业务流程的传递与控制,以Cardspace和WCF固有的安全测罗保证企业信息的安全,最后以ASP.NET AJAX,WPF和SILVERLIGHT技术丰富客户端界面的绚丽表现,从而改善企业客户对应用程序的体验,这就是微软实现企业级应用的霸业宏图”,当然对技术的兴趣和对WCF本身是否值得去学是最重要原因了。

 1:WCF体系架构:

服务模型层和信道层,服务模型层建立在信道层之上,提供了一个统一的可扩展的编程模型,信道层则通过绑定创建的信道栈为消息通信提供了一个传输,处理的通道;从客户端发送请求到服务端处理请求基于通道链的设计,有点那个职责链设计思想的运用的意思(不由得联想起asp.net处理模型也是基于通道链设计),直接上图,更为直观易理解:

图 1:WCF运行时体系架构图

 2:重要概念理解

什么是服务:服务是和技术无关的,WCF只是作为其中一种实现服务的技术框架。

什么是终结点:WCF中将服务的位置(Address),服务通信的方式(Binding),服务的内容(Contact)统称为终结点(简称为服务的ABC),所以从逻辑上讲,终结点相当于服务的接口,WCF中:客户端要访问某个服务,必须通过终结点。

什么是契约:描述服务功能的标准方式,契约与平台无关。

服务,终结点,契约之间的关系:每个服务至少必须公开一个业务终结点,每个终结点有且只能拥有一个契约,服务上的所有终结点都包含了唯一的地址,而一个单独的服务中则可以公开多个终结点。这些终结点可以使用相同或不同的绑定,公开相同或不同的契约。

3:WCF扩展

个人对WCF最感兴趣的一块,也很佩服WCF的设计师们。这个通信基础框架提供了很多扩展点,主要包括2处:信道层的扩展点和服务模型层的扩展点,信道层的扩展主要通过对绑定的扩展实现,具体来说就是自定义绑定元素以及相关的信道管理器,信道来来改变对消息的处理和传输方式;服务模型层的扩展主要体现在对服务端和客户端运行时框架的定制;WCF 在信道层的顶部还提供了一个高级运行时,主要是针对应用程序开发人员。在 WCF 文档中,它常被称为服务模型层。该高级运行时主要由一个称作调度程序(在服务主机上下文中)的组件和一个称作代理(在客户端上下文中)的组件组成。调度程序/代理组合的主要作用是在 WCF 消息对象和 Microsoft® .NET Framework 方法调用间进行转换(请参见图 1)。这些组件按照一系列明确定义的步骤来执行此过程,并在此过程的每个步骤中都提供了可供插入的扩展点。您可以使用这些扩展点来实现各种自定义行为,包括消息或参数验证、消息日志记录、消息转换、自定义序列化/反序列化格式、输出缓存、对象共用、错误处理和授权等。

4:服务模型层扩展点,直接上图
 
图 2 服务模型层中的代理组件(客户端)扩展点
 
 
图 3 服务模型层中的调度组件(服务端)扩展点

阶段 侦听器接口 说明
参数检查 IParameterInspector 在调用前后调用,以检查和修改参数值。
消息格式化 IDispatchMessageFormatter IClientFormatter 调用以执行序列化和反序列化。
消息检查 IDispatchMessageInspector IClientMessageInspector 发送前或收到后调用,以检查和替换消息内容。
操作选择 IDispatchOperationSelector IClientOperationSelector 调用以选择要为给定的消息调用的操作。
操作调用程序 IOperationInvoker 调用以调用操作
 图 4 调度程序/代理扩展摘要

 

     
作用域 接口 潜在影响
    服务 终结点 约定 操作
服务 IServiceBehavior
终结点 IEndpointBehavior  
约定 IContractBehavior    
操作 IOperationBehavior      

图 5 WCF四大行为接口(服务行为,契约行为,终结点行为,操作行为)
说明:
1)如果你只希望某个指定的Operation才具有这个扩展,你就只需要实现IOperationBehavior接口创建一个Attribute,并将此Attribute应用到对应的操作方法上;
2)如果你希望某个Service类型的所有操作都均有这个扩展,你可以实现IServiceBehavior接口;
3)如果你希望将相应的扩展特性应用到某个Contract接口上,让所有实现了该接口的Service的所有方法都具有这个扩展,你就实现IContractBehavior
4)如果你只希望某个Endpoint应用该扩展,则实现IEndpointBehavior接口

 
方法 说明
验证 仅在构建运行时前调用 — 允许您对服务说明执行自定义验证。
AddBindingParameters 在构建运行时的第一步时,且在构造底层通道前调用 — 允许添加参数,以影响底层通道堆栈。
ApplyClientBehavior 允许行为插入代理(客户端)扩展。请注意,IServiceBehavior 中不存在该方法。
ApplyDispatchBehavior 允许行为插入调度程序扩展。
 

4:自定义扩展
要在WCF的服务模型层中实现一个自定义的扩展,主要分解为以下几步:
1)实现调度程序/代理扩展接口自定义扩展组件
2)实现 行为接口 将自定义扩展应用到行为上
3)通过编程方式或者自定义特性或者配置文件方式将行为添加到运行时
 
附:下篇通过实用的例子巩固下