WCF Behaviors(行为)
《WCF体系结构》中介绍了WCF各个组成部分,本章分多次详细介绍behaviors
Behaviors(行为) 定义WCF 客户端与服务端运行时的特性或配置,behaviors 不仅影响WCF 运行时,还会影响客户端与服务端之间的数据通信。
Behaviors 主要分为三类:
Service behaviors(服务行为):运行于服务级别,适用于所有端点,负责内容如:实例化、事务、授权、审计 等;
Endpoint behaviors(端点行为):适用于服务端点,负责对进出服务的消息进行审查和处理;
Operation behaviors(操作行为):适用于操作级别,负责如 序列化、事务流、参数处理等;
其他behaviors:
Callback behaviors 控制客户端创建端点,用于双工通信;
运行时初始化方式:在客户端由ChannelFactory初始化运行时,在服务端则有SerivceHost初始化运行时,执行功能如下:
- ChannelFactory 通过泛型方式接收CLR类型 ,ServiceHost 通过构造方式接受CLR类型,读取CLR类型属性及特性信息;
//ChannelFactory DuplexChannelFactorychannelFactory = new DuplexChannelFactory (stockContext, endpointName); //ServiceHost ServiceHost servcieHost = new ServiceHost(type);
此操作中,会分析作为代码定义的特性信息,如:
[ServiceBehavior(TransactionTimeout="00:00:30")]
- 从 app.config或web.config 文件加载配置信息,ChannelFactory 主要关注绑定信息,ServiceHost 主要关注契约和绑定信息;
分析配置文件中behavior定义,如:
- 构造运行时环境结构,即:ServiceDescription;
ChannelFactory 与 ServiceHost均构建了运行时,并将第1、2步中的行为插入到运行时中;
- 启动通信,ChannelFactory使用通道(信道)来连接服务,ServiceHost打开通道(信道)来监听消息。
在客户端,行为通常用来执行3种功能:
参数校验:在参数的数据转换为序列化之前,检验、修改 CLR形式的数据;
消息格式化:在CLR类型和序列化之间转换数据的过程中,检验、修改该数据;
消息校验:在转换成CLR类型之前,检验、修改该XML形式的数据。
在服务端,行为通常用于另外两种场景:
操作选择:在服务级别,检验入站消息并决定应该调用哪个操作;
操作调用:在操作级别,调用类的方法。
行为元素之间的控制流,图示: