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

时间:2014-07-07 14:22:44

标签: c# wcf validation

我有一个界面,在某个月我想为该界面添加参数。

我在某处读到(链接丢失),当我使用Datacontracts时,我可以轻松地将属性添加到datacontract。新属性将不会被发送到旧客户端上的服务器。

理论上我只有一个接口,而我的新旧客户端可以使用该接口。我明白这是对的吗?

但现在我正在使用Microsoft的validation Block。这是否打破了我的“功能”,即具有易于维护的接口?

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

1 个答案:

答案 0 :(得分:2)

对于ServiceContracts上的方法更改或DataContracts中的数据更改,并不是很清楚,但是,两者都存在一定程度的不间断更改兼容性:< / p>

Service Contracts, From MSDN

  

添加服务公开的服务操作是一项不间断的更改,因为现有客户不需要关心这些新操作。

附带条件:

  

向双工回调合约添加操作是一项重大改变。

在最后添加新参数现有方法签名可能适用于旧版本的客户端调用,但会导致传递类型的默认值 - 例如对于引用类型为null,对于数字类型为零等。这可能会破坏事物并需要进行额外验证(例如,DateTime.MinValue无法与Sql DateTime列完美匹配。

同样,对于DataContractsfrom MSDN

  

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

新的datamember属性将被默认,并且将忽略过时/删除的属性。

您还可以使用Name上的DataMembers媒体资源重命名成员。

VAB将遵循相同的规则 - 即对新字段的任何验证都需要了解所提供的默认值,这意味着您无法验证新字段。

如果客户端连接到您的服务,那么追溯性地进行这样的更改并不是一个好主意 - 第一次正确设计界面,然后继续进行版本控制策略是值得的,您可以为旧版本提供外观客户端连接到旧接口,然后实际将旧格式转换为新格式,并对有关丢失或过时数据的故意映射和默认决策。