Pushkar Prabhu Ответов: 1

Управление версиями Wcf и обратная совместимость


Всем привет,

Я должен сделать управление версиями WCF, а также он должен быть обратно совместим.
Я использую Channel factory для создания экземпляра сервиса.

Заранее спасибо,
Пушкарь

Что я уже пробовал:

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

[ServiceContract(Name = "Test", Namespace = "http://Test/ServiceContract/2016/1")]
public interface IMYWCFV1
{
     [OperationContract]
     string GetMessage(int id);
        
     [OperationContract]
     int GetId(string message);
        
}

[ServiceContract(Name = "Test", Namespace = "http://Test/ServiceContract/2016/2")]
public interface IMYWCFV2
{
    [OperationContract]
    string GetMessage(int id);
        
    [OperationContract]
    int GetId(string message);
       
}

1 Ответов

Рейтинг:
0

johannesnestler

Я бы посоветовал вам начать с чтения [^] (снова)

Создание нового сервисного контракта в новом пространстве имен - это просто новый сервисный контракт...

Так что забудьте об этом и начните со "свежего ума". Спросите себя: хочу ли я строгого контроля версий? (читайте статью MSDN) или это делает слабое управление версиями? (это было на 100% верно для всех случаев, которые у меня были за эти годы). Лучше почитайте сами и спросите подробности, которых вы, возможно, не поймете. Но несколько общих советов-никогда ничего не удаляйте из существующих сервисных контрактов, просто добавляйте. И если контракты сообщений могут измениться (маловероятно, если вы просто используете их как DTO), используйте вместо этого интерфейсы и отделите контракты сообщений от реализации так же, как вы сделали бы это с сервисными контрактами.

Если вы хотите строгое управление версиями, вы должны изменить клиентов, если у вас есть новая "строгая" версия, для "слабого" управления версиями вы не можете изменить клиентов до тех пор, пока новый контракт "совместим" (=ничего не удалил, просто добавил.) Если вы затем хотите использовать, например, новый метод обслуживания из нового контракта на стороне клиента, вы все равно должны изменить клиентов...