WCF技术内幕 第4章 (4)
契约
契约定义了程序中的终结点,终结点使用的消息交换模式和终结点处理的消息结构。
WCF里定义了三种契约类型:服务契约、数据契约和消息契约。服务契约描述了终结点的操作。描述包含名称、消息交换模式、会话规范信息、请求和响应的消息头、每个操作的安全信息。数据契约是映射消息体到一个或多个操作。消息契约映射消息和消息头到一个或多个操作。
服务契约
服务契约是一个被ServiceContractAttribute或OperationAttribute属性标记的类或接口。ServiceContractAttribute可以使用在类和接口上,而OperationContractAttribute只能用在方法上。绝大部分标记了OperationContractAttribute的类型成员都会被ServiceContractAttribute标记。
数据契约
数据契约映射.Net Framework类型到消息体。数据契约使用的属性是DatatContractAttribute和DataMemberAttribute。
[ServiceContract] interface IService1 { [OperationContract] void GetData(MessageType message); //Param is message type [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); } [DataContract] public class CompositeType { string stringValue = "Hello "; [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } } [MessageContract] sealed class MessageType { [MessageHeader] int? statusCode; [MessageBodyMember] CompositeType messageBody; internal MessageType(Int32 statusCode) { this.statusCode = statusCode; this.messageBody = new CompositeType(); } }
WCF主要有两个架构层的基础结构。这两个层次的名字分别为服务模型层(ServiceModel layer)和通道层(Channel layer)。 服务模型层是用户代码和通道层之间的桥梁。通道层是做了真正的消息相关的工作,是了解特定传输方式和WS-×消息编排的层。
服务模型层调用发送者上的代理(Proxy,也被称为Client)和接收者上的分发器(Dispatcher)有不同的作用,尽管它们是相同架构层的不同部分。代理负责创建消息,并发送给通道层。分发器负责反序列化接收到的消息,实例化对象并分发反序列化的消息内容到此对象。
在消息接收者上,地址告诉通道侦听请求消息的地址。在发送者上,地址告诉通道消息接收者的地址。
绑定,就是创建通道层的工厂对象的集合。
契约是消息序列化和反序列化使用的,它们同样会来确定接收程序的消息交换模式。