2011-03-23 23 views
7

我有一个与客户端v1一起工作的wcf合同。在WCF合同中标记不推荐使用的字段

现在我正在使用服务v2,并且我想将某些字段标记为已弃用,所以客户端v1将会看到并使用它们,而客户端v2将忽略它们。

有没有这个问题的最佳做法?我应该使用WCF中的任何现有属性?

谢谢。

回答

12

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

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

参考文献:Obsolete Attribute

+0

[已弃用]是您创建的自定义属性吗? – Adibe7 2011-03-23 13:18:23

+0

对不起,我的意思是'[Obsoltete]'。更正它。 – Aliostad 2011-03-23 13:31:55

+0

[过时]不会让我选择支持v1 – Adibe7 2011-03-23 13:35:33

0

就我们而言,我们通常通过名称空间来对操作进行版本化。当一个操作被弃用时,我们只在客户端可以通过wsdl看到的描述中放置一个弃用注释。我们通知客户,让他们知道已过时的操作以及其到期日期。

0

我同意@Aliostad您不应该从服务合同中删除操作,因为它会引入重大更改,因此应避免在单一版本的API中使用。但是,如果您想通知客户/消费者有关计划中的某些更改或有任何其他需要向操作合同添加某些“额外”信息,则可以查看IWsdlExportExtension接口,创建一个自定义属性,以实现它并注释特定的操作。

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

相关问题