首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新由wcf验证块验证的接口

更新由wcf验证块验证的接口
EN

Stack Overflow用户
提问于 2014-07-07 14:22:44
回答 1查看 86关注 0票数 1

我有一个接口,在某个月内,我想向该接口添加参数。

我在某个地方读到(链接丢失了),当我使用Datacontracts时,我可以很容易地将Properties添加到数据域。新属性将不会发送到旧客户端上的服务器。

理论上,我只有一个接口,我的新老客户端可以使用该接口。我明白了吗?

但现在我正在与微软的验证块合作。这是否破坏了我拥有易于维护的接口的“特性”?

使用验证块管理不同版本的接口的好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 15:02:33

现在还不清楚您是指对ServiceContracts上的方法进行更改,还是指对DataContracts中的数据进行更改,但是,这两种方法都有一定程度的可兼容性:

对于服务合同,来自MSDN

添加由服务公开的服务操作是一个无损的更改,因为现有客户端不需要关心这些新操作。

但有条件:

将操作添加到双工回调合同是一项重大更改。

在末尾添加新参数--现有方法签名可能适用于来自旧版本的客户端调用,但将导致传递类型的默认值--例如引用类型为null,数值类型为零,等等。这可能会中断一些事情,并需要额外的验证(例如,DateTime.MinValue不会很好地与Sql DateTime列结合。

类似地,对于DataContracts来自MSDN

在大多数情况下,除非需要严格的模式有效性(新实例对旧模式进行验证),否则添加或删除数据成员并不是一项重大更改。

新的数据成员属性将被默认,过时/删除的属性将被忽略。

还可以使用Name属性在DataMembers上重命名成员。

VAB将遵循同样的规则--即对新字段的任何验证都需要知道所提供的缺省值,这意味着您无法验证新字段。

一旦客户端连接到您的服务,追溯进行这样的更改并不是一个好主意--首先正确地设计一个接口,然后再制定一个版本控制策略,这样您就可以为老客户端提供一个外观,让它连接到旧的接口,然后实际将旧的格式转换成新的接口,并对丢失或过时的数据进行深思熟虑的映射和默认决策。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24612886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档