绑定是特殊配置元素(称为 绑定元素)的集合,每当构造客户端或服务终结点时,服务运行时都会评估这些元素。 绑定中的绑定元素的类型和顺序决定了终结点通道堆栈中协议和传输通道的选择和堆叠顺序。
绑定(尤其是系统提供的绑定)通常还具有许多配置属性,这些属性反映封装绑定元素的最常见修改属性。
绑定必须仅包含一个传输绑定元素。 每个传输绑定元素都意味着一个默认消息编码绑定元素,可以通过向绑定添加最多一个消息编码绑定元素来覆盖该默认元素。 除了传输和编码器绑定元素,绑定还可能包含任意数量的协议绑定元素,这些元素共同实现服务所需的功能,并将 SOAP 消息从一个终结点发送到另一个终结点。 有关详细信息,请参阅 使用绑定配置服务和客户端。
扩展绑定和绑定元素
Windows Communication Foundation(WCF)包括系统提供的绑定,涵盖各种场景。 (有关详细信息,请参阅 System-Provided 绑定。但是,有时可能需要创建和使用 WCF 中不包含的绑定。 以下方案需要创建新的绑定。
若要使用新的绑定元素(如新的传输、编码或协议绑定元素),必须创建包含该绑定元素的新绑定。 例如,如果为 UDP 传输添加了自定义
UdpTransportBindingElement
,则需要创建新的绑定才能使用它。 有关使用 System.ServiceModel.Channels.CustomBinding 类型执行此行为的信息,请参阅 自定义绑定。以系统提供的绑定没有在公共属性上公开的方式配置现有绑定元素。 例如,必须创建新的绑定以更改执行签名和加密作的顺序。 有关执行此行为的信息,请参阅 如何:自定义 System-Provided 绑定。
建立仅公开特定配置选项的公司标准绑定。 例如,若要为公司创建一种无法禁用安全性的 WSHttpBinding 变体,请创建一个新的绑定,其行为与 WSHttpBinding 类似,但安全性始终处于开启状态。 有关详细信息,请参阅 创建 User-Defined 绑定。
为了进行元数据的自定义,通常会或不一定需要配置或使用一些自定义绑定元素。 有关为绑定和绑定元素提供元数据支持的详细信息,请参阅 配置和元数据支持。
通道、绑定和绑定元素
绑定和绑定元素是应用程序编程模型(包括属性和行为)和通道模型(包括工厂和侦听器、消息编码器以及传输和协议实现)之间的连接。 通常,实现绑定元素和绑定的目的是使通道能够被应用程序层使用。
通道层将消息传递给服务层或从服务层接收消息,并在终结点之间传输这些消息。 在客户端上,通道层是一个通道工厂堆栈,用于创建网络终结点的通道。 在服务中,通道层指的是由通道侦听器组成的栈,用于接受网络终结点接收到的通道。
有两种常规类型的通道:协议通道和传输通道。 传输通道负责将消息从一个网络终结点实际传输到另一个网络终结点。 传输通道必须具有默认消息编码器,并且应该能够使用通过消息编码器绑定元素提供的备用消息编码器。 消息编码器负责将 System.ServiceModel.Channels.Message 转换为线路表示形式,反之亦然。 协议通道负责实现 SOAP 级协议(例如,WS-Security 或 WS-ReliableMessaging)。
传输和协议通道的主要要求是实现所需的通道接口。 若要创建有效的通道层,它们必须具有关联的工厂和侦听器,等等。 若要使用 WCF 中的通道实现,需要为每个通道派生自 BindingElement 关联的绑定元素,并且应该有一个相关的绑定扩展元素,以便包含在派生自 BindingElementExtensionElement的配置文件中。
如前所述,可以堆叠消息编码器、协议和传输通道实现的绑定元素,形成通道堆栈,将通道堆栈排成有序集的机制是绑定。 绑定和绑定元素使应用程序编程模型和信道模型相互联系。 可以直接从代码中使用通道实现,但如果编码器、传输和协议没有实现为绑定元素,则无法通过服务层编程模型进行使用。
有关开发通道及其绑定元素的详细信息,请参阅 扩展通道层。