`

WCF扩展:行为扩展Behavior Extension

 
阅读更多

行为扩展Behavior Extension,使用自定义行为扩展Service Model

1 引言

WCF是一个极具可扩展性的分布是消息通信框架。

对于WCF的一些基本概念不在本文的内容中详细介绍,本文基于你对WCF有一定的认识,并对于其中的基本概念已经有一定的理解。

2 行为扩展

2.1 行为相关的流程

WCF Client Behavior

上图是客户端的行为相关的一个流程,也可以看做是一个客户端的调用之后,数据流程。

每个Endpoint对应一个Client Runtime Component,每个Client Runtime Component有多个Client Operation Runtime Component,每个Client Operation Runtime Component又对应一个Endpont’s Contract的方法。

调用一个wcf方法之后,Client Operation Runtime Component负责序列化提交的数据(将来还会反序列化服务端响应的数据),经过Client Runtime Component向上传递,最终传递给WCF Channel Layer。

WCF Server Behavior

上图是一个服务端的行为流程。主要参数的组件是Dispatcher组件。它负责接收client的请求消息,传递给适当的服务去处理。

如图,有三种dispatcher。Channel Dispatcher,Endpoint Dispatcher,Operation Dispatcher。它们的职责都在图中有标识。

2.2 扩展步骤

用自定义的行为扩展client runtime component和dispatcher,通常有三个步骤。

2.2.1 声明你要提供的行为属于什么类型

首先要声明这个自定义行为的类型。是工作在客户端,用来向消息中添加序列化之后的提交到服务器的数据?还是工作在服务端,用来管理服务类型的实例?通过实现适当的接口,这一步很容易实现。这些接口大多定义在System.ServiceModel.Dispatcher命名空间中。

假如要自定义一个工作在客户端的行为,功能是自定义数据的序列化过程。实现IClientMessageFormatter接口,实现里面的序列化和反序列化方法就可以了。

假如要自定义一个工作在服务端的行为,功能是管理服务类型的实例。实现IInstanceProvider接口就可以了。

在客户端,和客户端运行时相关的两个类是:

1 System.ServiceModel.Dispatcher.ClientOperation

代表operation操作层面的运行时。

System.ServiceModel.Dispatcher.ClientOperation有两个属性可以附加操作类型的行为。

1)ParameterInspectors,是System.ServiceModel.Dispatcher.IParameterInspector对象的集合。因此,你可以创建自己的参数Inspector行为,可以检查和随意的修改传入传出的数据。

2)Formatter,实现IClientMessageFormatter接口的对象可以赋值给这个属性。用来将传递给服务端的数据序列化到消息中,更精确的说是System.ServiceModel.Channels.Message类型的对象中。

2 System.ServiceModel.Dispatcher.ClientRuntime

代表endpoint层面的运行时。有两个属性可以附加endpoint行为。

1)OperationSelector,实现System.ServiceModel.Dispatcher.IClientOperationSelector 接口的对象可以赋值给这个属性。用来决定一个请求分配到服务的那个方法上。

2)MessageInspectors,实现System.ServiceModel.Dispatcher.IClientMessageInspector接口的对象集合。可以检查,随意修改请求和响应的消息。可以拷贝一份提交的消息,以后可以做审计功能。

在服务端,和dispatcher相关的有三个类。

1 System.ServiceModel.Dispatcher.DispatchOperation

代表operation操作相关的dispatcher类。有三个属性可以附加操作相关的行为。

1)Formatter,实现接口System.ServiceModel.Dispatcher.IDispatchMessageFormatter 的对象。将传入到服务端的消息反序列化为数据,将输出到客户端的响应序列化到消息中。

2)ParameterInspectors,是System.ServiceModel.Dispatcher.IParameterInspector对象的集合。这些对象可以检查,随意修改从dispatcher message formatter传入的反序列化的数据,和传出去的响应数据。

3)Invoker,实现System.ServiceModel.Dispatcher.IOperationInvoker的对象。用来执行服务的实现(服务的接口实现)操作,将由输入消息反序列化产生的数据传递过去。

2 System.ServiceModel.Dispatcher.DispatchRuntime

代表endpoint层面的组件。有下面的几个可以附件行为的属性。

1)InstanceContextProvider,实现System.ServiceModel.Dispatcher.IInstanceContextProvider 接口的对象。用来管理状态信息。

2)OperationSelector,实现System.ServieModel.Dispatcher.IDispatchOperationSelector接口的对象,根据请求消息中的地址,将消息分配到适当的操作。

3)MessageInspectors,实现System.ServiceModel.Dispatcher.IDispatchMessageInspector接口的对象,用来附件一个消息检查器,检查输入的请求消息。

4)InstanceProvider,实现System.ServiceModel.Dispatcher.IInstanceProvider接口的对象,用来管理服务的类型。

3 System.ServiceModel.Dispatcher.ChannelDispatcher

下面是客户端调用一个服务之后,事件的发生顺序。

  1. 客户端的operation selector根据客户端执行的方法决定请求服务端的哪个operation。
  2. 挂在client runtime components上的parameter inspactors检查客户端的调用参数,也可以修改客户端的调用参数。parameter inspactor用来验证传出到服务端的数据是否在合法的范围,如果不在可以修改它。也可以将数据项转变为特定的值。
  3. 客户端的message formatter将数据项序列化为xml,放入到wcf的消息中。
  4. System.ServiceModel.Channel.Message代表传递到endpoint level的client runtime components的消息。
  5. 客户端的message inspactor检查,随意修改System.ServiceModel.Channel.Message对象。
  6. 消息传输到WCF的Channel Layer。更准确的说法是,消息传递到Channel Stack的顶层Channel。
  7. 消息被服务接收,从Channel Layer传递到channel dispatcher,然后传输给适当的endpoint。
  8. instance context provider获取状态信息。
  9. 根据消息中的address,dispatch operation selector决定交给哪个operation。
  10. dispatch message inspactor可以检查,随意修改传入的System.ServiceModel.Channel.Message对象。
  11. instance provider创建或者获取的某一个服务的实例。
  12. 通过dispatch operaiton selector将消息传递给dispatcher component。
  13. dispatch message formatter反序列化消息中的body部分,放入数据项数组中。
  14. dispatcher组件附加的parameter inspactor可以检查,随意修改数据项。
  15. operation invoker执行具体的服务实现,将反序列化的数据项传递给方法的参数。
  16. 如果方法有返回值,附加到dispatcher的parameter inspactor可以检查,修改返回值。
  17. dispatch message formatter序列化返回值,放入System.ServiceModel.Channel.Message对象。
  18. 响应消息传递给endpoint 层的dispatcher组件。
  19. dispatch message inspactor可以检查,随意修改响应消息。
  20. instance context provider可以持久化,或者是抛弃状态信息。
  21. instance provider有机会处理掉它创建的服务的实例instance。
  22. 响应消息传递到channel dispatcher,传递给最高层的channel。
  23. 响应消息被客户端接收,传递给客户端的channel layer。
  24. 客户端的message inspactor检查,修改响应消息。
  25. 客户端的operation selector识别响应消息中的操作。
  26. 响应消息被传递到发出请求的那个操作。
  27. 客户端的message formatter反序列化响应消息的body部分,传递给数据项数组。
  28. 这些数据项数组会别传递给挂在client runtime的parameter inspactor,可以检查和修改数据项。
  29. 程序员的代码使用数据项进行操作。

Technorati 标签: WCF,Extension,Behavior
分享到:
评论

相关推荐

    一个非常简单的WCF例子:Hello World

    一个非常简单的WCF例子:Hello World 本解决方案有3个项目: 1、WCFClient:客户端,展示通过wcf后得到的结果,一个小的winform; 2、WCFContrlPanel:主控程序,作为打开/关闭wcf服务的控制面板,winform; 3、...

    Professional WCF 4: Windows Communication Foundation with .NET 4 (Wrox Programmer to Programmer)

    《Professional WCF 4: Windows Communication Foundation with .NET 4》是Wrox出版社出版的一本专为程序员设计的深入解析Windows Communication Foundation(WCF)的书籍。WCF是微软.NET Framework 4中的一个核心...

    创建一个简单的WCF程序:WcfServices、WcfServices2

    WCF服务是由接口(定义服务契约)、实现类(实现服务契约)和配置文件(定义服务的行为和绑定)组成的。在`WcfServices`和`WcfServices2`这两个项目中,我们可以看到这些元素的具体实现。 1. **服务契约**: 服务...

    wcf扩展性例子

    1. **行为扩展**:行为是WCF服务生命周期中的关键元素,包括服务行为、操作行为、契约行为和终结点行为。通过自定义行为,我们可以控制服务实例化、服务托管、错误处理、事务管理等。例如,你可以创建一个自定义的...

    我的第一个WCF程序:HelloInDigo

    课程的第一部分,"WCF概述",涵盖了WCF的基础概念,包括服务、终结点、绑定、行为等核心元素,以及如何设置和运行一个基本的服务实例。 WCF的核心概念: 1. **服务**:WCF服务是提供特定功能的逻辑实体,可以通过...

    Professional WCF 4: Windows Communication Foundation with .NET 4

    本书《Professional WCF 4: *** 4》致力于为读者全面介绍.NET 4中的Windows Communication Foundation(WCF)技术。WCF是.NET平台上的核心技术之一,主要用来构建面向服务的应用程序、在多种通信场景下交换消息,...

    WCF编程:WCF服务和客户端的建立[归纳].pdf

    Windows Communication Foundation (WCF) 是微软推出的一种用于构建分布式应用程序的框架,它集成了多种通信技术,为开发者提供了一种统一的方式来创建、发布和消费服务。WCF是.NET Framework 3.0及更高版本的一部分...

    WCF技术专题:WCF入门与进阶

    WCF的主要目标是实现跨平台、跨语言的互操作性,以及在分布式系统中的高安全性、可靠性和可扩展性。 **一、WCF基础概念** 1. **服务**: WCF的核心单元,它定义了一组可调用的操作,可以通过网络进行访问。服务由...

    (15):扩展性-WCF课件

    WCF框架的设计充分考虑了可扩展性需求,允许开发者在多个层次上对其进行扩展,包括但不限于自定义`ServiceHost`的初始化、添加或修改服务、端点、契约的行为或操作级别、消息拦截等。 - **自定义ServiceHost初始化*...

    Wrox.Professional.WCF.4.Windows.Communication.Foundation.with.NET.4.

    通过理解和掌握WCF,开发者能够构建出高效、安全、可扩展的服务型应用。这本书《Wrox Professional WCF 4: Windows Communication Foundation with .NET 4》将帮助读者深入理解并熟练运用这些概念和技术。

    WCF教程WCF教程

    1. **行为扩展**:自定义服务行为和客户端行为,如行为配置、行为实现。 2. **绑定元素扩展**:创建自定义绑定以支持新的传输或编码方式。 3. **服务主机扩展**:控制服务启动、停止和生命周期。 4. **消息编码器**...

    jquery 调用WCF :多参数

    在`Web.config`文件中,配置服务行为和服务绑定,确保服务可用并能被外部调用。例如: ```xml <behavior name="webBehavior"> </behavior> ``` 上述配置启用JSON和XML格式的数据传输,并...

    WCF流:通过HTTP上传/下载文件

    Windows Communication Foundation(WCF)是.NET Framework中的一个强大组件,用于构建分布式应用程序。在处理大数据传输时,如大文件的上传和下载,WCF支持高效的流式传输模式,这可以显著降低内存消耗并提高性能。...

    WCF:Windows平台新一代通讯基础研究与分析

    《WCF:Windows平台新一代通讯基础研究与分析》一文深入探讨了Windows Communication Foundation(WCF)作为Windows平台上新一代通信技术基础的重要性和应用前景。WCF不仅为分布式系统的开发提供了统一的标准,还...

    WCF: A Case Study Involving a Distributed Client/Server Game

    ### WCF:分布式客户端/服务器游戏案例研究 #### 背景 Windows Communication Foundation(WCF)是由微软开发的一款软件开发工具包,作为.NET 3.0的一部分发布。它为跨机器之间的通信提供了一个灵活而强大的实现...

    WCF:Windows平台新一代通讯基础研究

    ### WCF:Windows平台新一代通讯基础研究 #### WCF简介及其在Windows平台的应用价值 Windows Communication Foundation(简称WCF)是Microsoft推出的一种统一的编程模型、系统服务与工具集,旨在帮助开发者创建...

    Ninject.Extensions.Wcf:Ninject WCF扩展

    此扩展增加了对WCF服务和行为的依赖项注入的支持。 有3个Ninject ServiceHostFactory可以在和。 Ninject.Extensions.Wcf.NinjectServiceHostFactory用于普通服务 Ninject.Extensions.Wcf....

    WCF 入门学习小程序源码一起附上

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。对那些对WCF不是很了解的读者来说,这个例子将带领你...

    构建WCF面向服务的应用程序系列课程(15):扩展性.zip

    1. **行为扩展**:WCF的行为允许我们自定义服务实例的行为,如服务实例的生命周期管理、数据验证、事务处理等。例如,我们可以创建自定义的行为来实现特定的日志记录或性能计数器。 2. **绑定扩展**:WCF的绑定决定...

Global site tag (gtag.js) - Google Analytics