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、 

  • 相关阅读:
    嵌入式:使用dd命令制作烧写文件
    C: 函数的名字是否受大小写影响?
    C++:互斥量C++实现,内存调试,自动锁
    linux环境ubuntu: pushd: not found
    3. 海思Hi3519A MPP从入门到精通(三 视频输入)
    详解YUV数据格式
    海思Hi3519A MPP从入门到精通(二 系统控制)
    海思Hi3519A MPP从入门到精通(一 系统概述)
    HiGV ui代码流程
    音视频学习路线
  • 原文地址:https://www.cnblogs.com/mad/p/1596286.html
Copyright © 2011-2022 走看看