惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
博客园 - 司徒正美
博客园 - 【当耐特】
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
宝玉的分享
宝玉的分享
V
V2EX
S
SegmentFault 最新的问题
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
Martin Fowler
Martin Fowler
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
L
LangChain Blog
D
Docker
腾讯CDC

博客园 - JerryShi

使用流模式传输大型数据 对象序列化之 替换(Surrogate) 使用 IExtensibleDataObject 进行往返式序列化 使用 NetDataContractSerializer 共享类型 WCF可序列化方式 序列化 VS 编码 自定义 Behavior 操作行为 之 事务 服务行为 之 元数据 服务行为 之 并发与实例化 基本的WCF编程(实例) WCF 体系结构 WCF服务 使用netTcpBinding 无法打开默认数据库 SharePoint 创建SSP时出现找不到 Windows NT 用户或组 的异常 SQL Server 2008 Mirror 泛型(一) 自定义属性Attribute(三) 自定义属性Attribute(二)
WCF Behaviors(行为)
JerryShi · 2011-09-25 · via 博客园 - JerryShi

WCF体系结构》中介绍了WCF各个组成部分,本章分多次详细介绍behaviors

Behaviors(行为)  定义WCF 客户端与服务端运行时的特性或配置,behaviors 不仅影响WCF 运行时,还会影响客户端与服务端之间的数据通信。

Behaviors 主要分为三类:

Service behaviors(服务行为):运行于服务级别,适用于所有端点,负责内容如:实例化、事务、授权、审计 等;

Endpoint behaviors(端点行为):适用于服务端点,负责对进出服务的消息进行审查和处理;

Operation behaviors(操作行为):适用于操作级别,负责如 序列化、事务流、参数处理等;

其他behaviors:

Callback behaviors 控制客户端创建端点,用于双工通信;

运行时初始化方式:在客户端由ChannelFactory初始化运行时,在服务端则有SerivceHost初始化运行时,执行功能如下:

  1. ChannelFactory 通过泛型方式接收CLR类型 ,ServiceHost 通过构造方式接受CLR类型,读取CLR类型属性及特性信息;
//ChannelFactory
DuplexChannelFactory channelFactory = new DuplexChannelFactory(stockContext, endpointName);
//ServiceHost
ServiceHost servcieHost = new ServiceHost(type);

此操作中,会分析作为代码定义的特性信息,如:

[ServiceBehavior(TransactionTimeout="00:00:30")]
  1. 从 app.config或web.config 文件加载配置信息,ChannelFactory 主要关注绑定信息,ServiceHost 主要关注契约和绑定信息;

分析配置文件中behavior定义,如:

  1. 构造运行时环境结构,即:ServiceDescription;

ChannelFactory 与 ServiceHost均构建了运行时,并将第1、2步中的行为插入到运行时中;

  1. 启动通信,ChannelFactory使用通道(信道)来连接服务,ServiceHost打开通道(信道)来监听消息。

在客户端,行为通常用来执行3种功能:

参数校验:在参数的数据转换为序列化之前,检验、修改 CLR形式的数据;

消息格式化:在CLR类型和序列化之间转换数据的过程中,检验、修改该数据;

消息校验:在转换成CLR类型之前,检验、修改该XML形式的数据。

在服务端,行为通常用于另外两种场景:

操作选择:在服务级别,检验入站消息并决定应该调用哪个操作;

操作调用:在操作级别,调用类的方法。

行为元素之间的控制流,图示:

行为控制流