Неужели обогащение Poco или Inteface заставит перекомпилироваться? - PullRequest
1 голос
/ 25 января 2012

Я пишу какой-то сервис.

Я задаю 2 вопроса относительно 2 ситуаций:

Ситуации

1) Я использую его«in-house», что означает dll

2, на который есть ссылка. 2) Я использую его по сети, как webService

Вопросы

A)

Если он предоставляет интерфейс для некоторого клиентского класса.и теперь я добавил некоторый метод к этому интерфейсу.

Нужно ли перекомпилировать все его клиенты, чтобы распознать

новый интерфейс, даже если они не используют новые методы?

B)

Если метод в интерфейсе моей службы ожидает некоторого PoCo со свойством a, b

и один из клиентов вызывает этот метод с тем же типом Poco, но это Poco определяется в клиентском коде как тот, который имеет, b, как и прежде, а также c, d.

Нужно ли перекомпилировать службу?Контракт нарушается?

1 Ответ

0 голосов
/ 27 апреля 2013

Для веб-сервисов, если вы уверены, , что изменения произойдут, вы можете разработать «версионный» интерфейс, который принимает общие аргументы и номер версии. Я сделал это, используя строку XML, содержащую содержимое переданных параметров (строка XML, передаваемая веб-службе, закодирована в HTML, чтобы избежать нарушения SOAP-конверта). В методах веб-службы выполняется проверка номера версии, после чего выполняется синтаксический анализ XML в ожидаемые типы для этого метода:

public void GenericWebServeceMethod(int version, string encodedXMLParameters)
{
    string xmlParameters = HTMLDecode(encodedParameters);

    switch(version)
    {
        case 1:
            ParameterType1 p1 = DecodeVersion1XML(xmlParameters);
            MethodVersion1(p1);
            break;
        case 2:
            ParameterType2 p2 = DecodeVersion2XML(xmlParameters);
            MethodVersion2(p2);
            break;
    }
}

Когда добавляются новые версии, вы расширяете оператор switch новыми версиями, которые по-прежнему позволяют клиентам, использующим более старые версии типов параметров, продолжать работать.

Для библиотеки DLL со ссылкой, используемой «внутри», вы можете сделать ссылку независимой от версии, добавив ссылку с помощью параметра «Обзор» в Visual Studio, а затем выбрав свойства ссылки и убедившись, что «Конкретная версия» свойство установлено на False. Тогда вы все равно можете использовать систему, аналогичную описанной выше, чтобы изменить способ обработки параметров в кодировке XML на основе переданного номера версии. Добавление новых методов разрешено, но вызывающий клиент не увидит их, пока не будет перекомпилирован.

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