В WCF есть способ опустить / скрыть ServiceOperation или DataMember из WSDL? - PullRequest
4 голосов
/ 18 мая 2011

У меня есть существующий сервис 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.
}

Ответы [ 2 ]

5 голосов
/ 06 октября 2011

Нет ничего готового для этого, но вы можете использовать расширение экспорта WSDL, чтобы удалить некоторые операции из метаданных службы. Я реализовал образец для этого сценария на http://blogs.msdn.com/b/carlosfigueira/archive/2011/10/06/wcf-extensibility-wsdl-export-extension.aspx.

1 голос
/ 18 мая 2011

WCF довольно устойчив к версионированию в некоторых ограничениях , как описано в этой статье MSDN. Вероятно, слишком поздно для вашей текущей службы принять некоторые из этих методов, но вы можете достичь желаемого, создав новые интерфейсы ServiceContractкоторые удаляют операции и перечисления, которые вам нужно скрыть.

Вам также необходимо создать новую конечную точку для нового интерфейса.Одна и та же реализация сервиса может поддерживать несколько интерфейсов с небольшими изменениями, поэтому изменения не должны быть слишком обширными.Любые новые клиенты будут использовать новую конечную точку службы, в то время как старые клиенты будут использовать исходную конечную точку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...