在WCF中,有没有办法从WSDL中省略/隐藏ServiceOperation或DataMember?

Cod*_*ike 4 .net c# wcf wsdl

我有一个现有的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.
}
Run Code Online (Sandbox Code Playgroud)

car*_*ira 5

没有任何可用于执行此操作的开箱即用的东西,但您可以使用WSDL导出扩展从服务元数据中删除一些操作.我在http://blogs.msdn.com/b/carlosfigueira/archive/2011/10/06/wcf-extensibility-wsdl-export-extension.aspx上为此方案实现了一个示例.