笔记:契约总结
服务契约
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、
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?