Поделиться через


Теория управления версиями для RPC и COM

Только два полностью безотказных метода поддерживают новые функции без риска проблем совместимости проводов:

  • Изменить версию интерфейса в соответствии с правилами; это не позволяет новым клиентам взаимодействовать со старым сервером, а также может или не препятствовать обмену данными старого клиента с новым сервером. Это разъясняется далее в этом разделе.
  • Введите другой интерфейс для работы с новыми функциями.

Стандартный интерфейс RPC определяется сочетанием GUID и номера версии; COM-интерфейс идентифицируется по его GUID. Версия состоит из основных и дополнительных частей. Для стандартных интерфейсов с одним и тем же ИДЕНТИФИКАТОРом GUID и разными номерами версий подключение возможно только в том случае, если основная версия совпадает, а клиент не превышает дополнительную версию сервера.

Следствием является то, что изменение GUID интерфейса RPC нарушает совместимость проводов, а изменение имени интерфейса — нет.

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

Для COM-интерфейса нельзя использовать атрибут version. Создание новых интерфейсов и наследование от старых интерфейсов эквивалентно управлению версией в RPC. Как правило, лучшим подходом в COM является создание нового интерфейса для расширенной функциональности. Эквивалентом дополнительной версии является новый интерфейс, наследующий от старого. Для изменения старых методов или старых типов данных требуется совершенно новый COM-интерфейс, который не наследуется от старого.

Для COM функция QueryInterface — это установленный метод проверки того, поддерживает ли сервер интерфейс; Следовательно, ситуации, когда клиент может взаимодействовать со старой или новой версией интерфейса, могут быть легко решены.