【发布时间】:2011-10-07 02:02:02
【问题描述】:
我有一个现有的 WCF 服务。在某些时候,有时数据协定中的[OperationContract] 或[DataMember] 会变成[Obsolete]。出于向后兼容性的原因,我不想删除该方法。另一个例子是有时我有一个 Enum,并且想要 [Obsolete] 一个选项,但我不能完全删除它,因为系统/数据库中已经存在包含该值的项目。
无论如何,有没有办法从生成的 WDSL 中省略某些项目?例如:
[ServiceContract]
public interface IMyService
{
[OperationContract]
string SomeMethod(string x); // I do want this in the WSDL
[Obsolete]
[OperationContract]
string OldMethod(string x); // I do NOT want this in the WSDL, but I do want it to still work / be callable if an older system tries to call it.
}
【问题讨论】:
-
保留那个 [DataMember] 与向后兼容性有什么关系?
-
请记住,这是 2 年前提出的,因此 WCF 已更改,但如果删除了
[DataMember],则 WCF 不会反序列化客户端发送的该属性的任何值。事后看来,更好的方法可能只是找到一种真正的方法来对服务进行版本控制,而不是从 WSDL 中“隐藏”属性或服务,但仍然允许客户端调用它。