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 имеет другое пространство имен, но он может работать, если у него такое же пространство имен. Тем не менее, я не знаю, что здесь лучше, и жду от кого-нибудь хорошего ответа.

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам