Сценарии конвейера надстройки
Модель объектов конвейера надстройки обеспечивает гибкость взаимодействия для ведущих приложений и надстроек следующими способами:
Обратная совместимость. Более новые версии узлов или надстроек могут работать со своими более старыми аналогами.
Изоляция. Одну или несколько надстроек можно перемещать в домен приложений в ведущий процесс или в изолированный процесс.
Совместное использование. Надстройку можно использовать в нескольких коммуникационных конвейерах.
На следующем рисунке показан простой коммуникационный конвейер и его сегменты.
Стандартный коммуникационный конвейер:
Обратная совместимость
Существуют два сценария, демонстрирующие обратную совместимость.
Новый узел, старые надстройки
На следующем рисунке показано, как новый узел может работать со старой надстройкой.
Коммуникационный конвейер с новым узлом и старой надстройкой
В данном сценарии обратной совместимости новый узел (узел v2) может работать со старой надстройкой (надстройка v1), так как его адаптер со стороны надстройки (адаптер со стороны надстройки v1->v2) преобразует типы в формат, который понимается старой надстройкой.
Новая надстройка (надстройка v2) имеет свои собственные сегменты представления и адаптера для взаимодействия с новым узлом.
Старый узел, новые надстройки
На следующем рисунке показано, как старый узел может работать с новыми надстройками.
Коммуникационный конвейер со старым узлом и новой надстройкой
В данном сценарии обратной совместимости новая надстройка (надстройка v2) может работать со старым узлом (узел v1), так как его адаптер со стороны надстройки (адаптер со стороны надстройки v2->v1) преобразует типы в формат, который понятен старому узлу.
Изменение уровней изоляции
Надстройки можно активировать в новом процессе или домене приложений с помощью соответствующей перегруженной версии метода Activate. Такая изоляция может быть необходима по следующим причинам:
Для обработки ситуаций, в которых ведущее приложение изменяется, и его новые зависимости не могут быть приспособлены под более старые надстройки. Например, это может произойти, когда ведущее приложение обновляется до новой версии приложения .NET Framework.
Для обеспечения надежности за счет выполнения надстройки в своем собственном процессе.
Создайте песочницу для надстройки. Например, ведущее приложение и надстройка имеют разные уровни доверия, как указано перечислением AddInSecurityLevel.
На следующем рисунке показан коммуникационный конвейер с двумя надстройками, одна из которых находится в изолированном процессе. На рисунке OOP указывает изолированный процесс.
Коммуникационный конвейер с изолированной надстройкой
В данном сценарии разработчик конвейера имеет две разные версии контракта и адаптеров: один оптимизирован для взаимодействия между приложениями и доменами, а другой оптимизирован для взаимодействия между процессами. Ни надстройкам, ни узлу не требуется знать о различиях, так как они используют одинаковые представления независимо от контракта и уровня изоляции.
Общие надстройки
Надстройку можно использовать с несколькими узлами при условии, что надстройка совместима с этими узлами. Например, можно использовать общую надстройку для реализации панели инструментов, которая предоставляет поиск в Интернете для ведущего веб-приложения. Другим примером является общая надстройка, которая предоставляет фильтры нежелательной почты и защиту от вирусов для серверов электронной почты или клиентов электронной почты.
Чтобы предоставить надстройке возможность работы с ее новым узлом, следует создать новый адаптер со стороны надстройки, который выполняет преобразование из представления используемой надстройки в контракт узла.
На следующем рисунке показано, как надстройка (надстройка "A") может совместно использоваться двумя ведущими приложениями (узел "A" и узел "B").
Коммуникационный конвейер с общей надстройкой: