zoukankan      html  css  js  c++  java
  • 笔记:契约总结

    服务契约 

    1、OperationContract不支持重载 会抛出InvalidOperationException

    解决办法就是加一个Name属性   [OperationService(Name="xxx")]

    客户端生的代理需要手工修改成重载,

    2、ServiceContract特性不能被继承,因此每个子接口也都需要标记ServiceContract特性,客户端需要手工修改

    3、服务契约的分解粒度

    4、契约查询 

    数据契约

    1、字段和属性不必同时加DataMember特性

    2、序列化事件 OnSerializing OnSerialized OnDeserializing OnDeserialized (StreamingContext context)

    3、 DataContract特性不继承,每层都必须标记

    4、WCF不支持用数据契约的子类替换基类

    5、可以使用 KnownTypeAttribute 给基类增加特性 [KnownType(typeof(Child)]

    6、可以使用 ServiceKnownTypeAttribute 给OperationContract增加特性 [ServiceKnownType(type(Child))]

    7、 序列化顺序 使用 Order   [DataMember(Order =1)]

    8、版本控制 服务新增成员后可以用 IsRequired = true ,这样客户端封送数据就必须升级为新本。

    9 、版本控制双向传递  IExtensibleDataObject 内部包含一个链表来存放所有对象和类型信息(包括未知的数据成员)  

    [ServiceBehavior(IgnoreExtensionDataObject =true)] 数据契约中未知数据成员都会被忽略,默认为false

    10、枚举总是支持序列化 所以不必应用DataContract特性

    11、可以显示的标记枚举特性,不被EnumMember 标记的成员不会被公开

    12、[EnumMember (value="别名")]

    13、 泛型在客户端将被改为 <原有名>Of<类型参数名><哈希值> MyClass<int>  改称为 MyClassOfint,自定义类则是Hash值

    14、IEnumerable<T>将被封送为 T[]

    15、集合数据契约 CollectionDataContractAttribute,此特性会将集合作为一个链表类型公开给客户端

    [CollectionDataContract(Name="MyCollectionOf{0}")]
    public class MyCollection<T> : IEnumerable<T>   => public class MyCollectionOfT : List<T>

    16、服务端使用数组,客户端可以用对应的集合

    17、 

  • 相关阅读:
    康复计划
    Leetcode 08.02 迷路的机器人 缓存加回溯
    Leetcode 38 外观数列
    Leetcode 801 使序列递增的最小交换次数
    Leetcode 1143 最长公共子序列
    Leetcode 11 盛水最多的容器 贪心算法
    Leetcode 1186 删除一次得到子数组最大和
    Leetcode 300 最长上升子序列
    Leetcode95 不同的二叉搜索树II 精致的分治
    Leetcode 1367 二叉树中的列表 DFS
  • 原文地址:https://www.cnblogs.com/mad/p/1596286.html
Copyright © 2011-2022 走看看