WCF技术内幕 第4章 (4)

契约

契约定义了程序中的终结点,终结点使用的消息交换模式和终结点处理的消息结构。

WCF里定义了三种契约类型:服务契约、数据契约和消息契约。服务契约描述了终结点的操作。描述包含名称、消息交换模式、会话规范信息、请求和响应的消息头、每个操作的安全信息。数据契约是映射消息体到一个或多个操作。消息契约映射消息和消息头到一个或多个操作。


服务契约

服务契约是一个被ServiceContractAttribute或OperationAttribute属性标记的类或接口。ServiceContractAttribute可以使用在类和接口上,而OperationContractAttribute只能用在方法上。绝大部分标记了OperationContractAttribute的类型成员都会被ServiceContractAttribute标记。


数据契约

数据契约映射.Net Framework类型到消息体。数据契约使用的属性是DatatContractAttribute和DataMemberAttribute。

    // Use a data contract as illustrated in the sample below to add composite types to service operations
    [DataContract]
    public class CompositeType
    {
        string stringValue = "Hello ";

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

消息契约

消息契约映射.NetFramework类型到消息架构上。如果XML是消息的结构,那么契约会映射.NET Framework类型到消息的schema上。这包含消息头和消息体。

    [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();
        }
    }

4.3 从内部剖析WCF

WCF主要有两个架构层的基础结构。这两个层次的名字分别为服务模型层(ServiceModel layer)和通道层(Channel layer)。 服务模型层是用户代码和通道层之间的桥梁。通道层是做了真正的消息相关的工作,是了解特定传输方式和WS-×消息编排的层。

服务模型层调用发送者上的代理(Proxy,也被称为Client)和接收者上的分发器(Dispatcher)有不同的作用,尽管它们是相同架构层的不同部分。代理负责创建消息,并发送给通道层。分发器负责反序列化接收到的消息,实例化对象并分发反序列化的消息内容到此对象。

在消息接收者上,地址告诉通道侦听请求消息的地址。在发送者上,地址告诉通道消息接收者的地址。

绑定,就是创建通道层的工厂对象的集合。

契约是消息序列化和反序列化使用的,它们同样会来确定接收程序的消息交换模式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值