WCF - управление версиями контрактов (на примере)

Это должно быть легко для тех, кто знаком с лучшими практиками управления версиями контрактов на службы / данные. Я хочу убедиться, что буду использовать это управление версиями правильно.

Итак, допустим, у нас есть контракт на обслуживание:

[ServiceContract(Namespace="http://api.x.com/Svc1")]
public interface IService1
{
   [OperationContract(Name = "AddCustomer")]
   bool AddCustomer(DTOCustomer1 customer);
}

и контракт данных:

[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2011/01/DTO")]
public class DTOCustomer1
{
   [DataMember(Name="Name")]
   public string Name { ... }
}

если мне действительно нужно заменить последнее на что-то другое: (ниже приведен только пример)

[DataContract(Name="Customer", Namespace="http://api.x.com/Svc1/2012/01/DTO")]
public class DTOCustomer2
{
   [DataMember(Name="Name")]
   public string Name { ... }

   [DataMember(Name="Address")]
   public DTOAddress Address { ... }
}

... тогда как мне использовать DTOCustomer2 вместо DTOCustomer1 из службы, чтобы старые и новые клиенты были совместимы? Что рекомендуется в этом случае? Изменится ли мой контракт на обслуживание? AFAIK мне не нужно будет менять контракт на обслуживание. Как будет выглядеть сервисный договор? Нужна ли мне новая конечная точка? Нужен ли мне новый контракт на операцию с использованием нового контракта данных?

EDIT1: просто меняю

bool AddCustomer (клиент DTOCustomer1);

в

bool AddCustomer (клиент DTOCustomer2);

Сделаю?

EDIT2: ответ на EDIT1 - Нет, поскольку DTOCustomer2 имеет другое пространство имен, но он может работать, если он имеет то же пространство имен. Тем не менее, я не знаю, что здесь лучше всего, и жду, что кто-нибудь даст хороший ответ.

Заранее спасибо!


person Learner    schedule 10.01.2012    source источник


Ответы (2)


В итоге я ответил на этот вопрос с помощью другого вопроса здесь: WCF - управление версиями

person Learner    schedule 11.01.2012

Найдите несколько полезных ссылок, которые описывают передовой опыт управления версиями контрактов данных.

  1. Рекомендации: управление версиями контракта данных
  2. Контроль версий контракта данных

Вторая ссылка описывает, как вы поступаете, когда хотите добавить или удалить атрибуты вашего контракта данных и несколько других сценариев.

Надеюсь, это поможет.

person Rajesh    schedule 10.01.2012
comment
Спасибо за ответ ... Я уже читал статьи по размещенным вами ссылкам, но до сих пор не понимаю, как применить их к моему примеру. - person Learner; 10.01.2012