引用《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)。这些组件按照一系列明确定义的步骤来执行此过程,并在此过程的每个步骤中都提供了可供插入的扩展点。您可以使用这些扩展点来实现各种自定义行为,包括消息或参数验证、消息日志记录、消息转换、自定义序列化/反序列化格式、输出缓存、对象共用、错误处理和授权等。
阶段 | 侦听器接口 | 说明 |
---|---|---|
参数检查 | IParameterInspector | 在调用前后调用,以检查和修改参数值。 |
消息格式化 | IDispatchMessageFormatter IClientFormatter | 调用以执行序列化和反序列化。 |
消息检查 | IDispatchMessageInspector IClientMessageInspector | 发送前或收到后调用,以检查和替换消息内容。 |
操作选择 | IDispatchOperationSelector IClientOperationSelector | 调用以选择要为给定的消息调用的操作。 |
操作调用程序 | IOperationInvoker | 调用以调用操作 |
作用域 | 接口 | 潜在影响 | |||
服务 | 终结点 | 约定 | 操作 | ||
服务 | IServiceBehavior | ✗ | ✗ | ✗ | ✗ |
终结点 | IEndpointBehavior | ✗ | ✗ | ✗ | |
约定 | IContractBehavior | ✗ | ✗ | ||
操作 | IOperationBehavior | ✗ |
2)如果你希望某个Service类型的所有操作都均有这个扩展,你可以实现IServiceBehavior接口;
3)如果你希望将相应的扩展特性应用到某个Contract接口上,让所有实现了该接口的Service的所有方法都具有这个扩展,你就实现IContractBehavior
4)如果你只希望某个Endpoint应用该扩展,则实现IEndpointBehavior接口
方法 | 说明 |
---|---|
验证 | 仅在构建运行时前调用 — 允许您对服务说明执行自定义验证。 |
AddBindingParameters | 在构建运行时的第一步时,且在构造底层通道前调用 — 允许添加参数,以影响底层通道堆栈。 |
ApplyClientBehavior | 允许行为插入代理(客户端)扩展。请注意,IServiceBehavior 中不存在该方法。 |
ApplyDispatchBehavior | 允许行为插入调度程序扩展。 |