标记WCF合同中已弃用的字段

时间:2011-03-23 11:57:27

标签: c# wcf deprecated datacontract

我有一个与客户端v1一起使用的wcf合约。

现在我正在研究服务v2,我想将某些字段标记为已弃用,因此客户端v1将查看并使用它们,而客户端v2将忽略它们。

此问题是否有最佳做法?我应该使用WCF中的任何现有属性吗?

感谢。

3 个答案:

答案 0 :(得分:13)

您可以将旧属性修饰为[Obsolete],但客户端只有在使用DLL引用而不是服务/ Web引用(WSDL)时才会看到它们。 [Obsolete]装饰将不会传递给使用WSDL生成代理的客户端

就WCF版本控制而言,一旦发布了界面,就无法删除任何方法,或者就合同而言,您实际上不应删除任何属性。如果希望新客户端使用它们,可以发布新接口并创建单独的DTO类。

参考:Obsolete Attribute

答案 1 :(得分:0)

在我们这边,我们通常通过命名空间对operatiom进行版本控制。当一个操作被弃用时,我们只需在描述中放置一个弃用注释,客户端可以通过wsdl看到它。我们通知我们的客户,让他们知道已弃用的操作以及到期日期。

答案 2 :(得分:0)

我同意@Aliostad一般不应该从服务合同中删除操作,因为它会引入重大变更,因此应该在单个版本的API中避免使用。

但是,如果您想要通知客户/消费者一些计划的更改,或者还有其他任何需要添加某些"额外"在操作合同的信息中,您可以查看IWsdlExportExtension接口,创建实现它的自定义属性并注释特定操作。

您可以查看this article以获取详细参考。