Расширение интерфейса WCF с помощью плагинов - PullRequest
1 голос
/ 08 августа 2010

Я создаю приложение с интерфейсом Silverlight, который связывается с бэкэнд-сервисом через WCF. Мой сервис имеет интерфейс, который обрабатывает все основные коммуникации с внешним интерфейсом.

Бэкэнд может быть расширен с помощью различных плагинов, и я планирую загрузить пользовательские модули silverlight для настройки этих плагинов с помощью призмы. Проблема в том, что эти плагины добавят дополнительные функции, которые не являются частью базового интерфейса WCF. Я хотел бы сохранить единую конечную точку для всех моих коммуникаций (т. Е. Не требовать дополнительной настройки маршрутизатора).

Я ищу несколько идей о том, как подойти к этой реализации. Моя «лучшая» мысль на данный момент - иметь функцию в моем основном интерфейсе, которая принимает имя функции и список параметров, и использовать отражение, чтобы найти функцию для вызова в конкретном плагине. по многим причинам.

Каковы ваши рекомендации по созданию расширяемого интерфейса WCF на одной конечной точке?

Спасибо

1 Ответ

3 голосов
/ 08 августа 2010

Я могу придумать два способа, которыми это обычно обрабатывается:

  1. XML-контракты - в основном, ваша служба становится не более чем параметром XML с возвращаемым значением XML.Затем вы можете проанализировать или сериализовать / десериализовать команду, проходящую между клиентом и сервером.Поскольку ваш контракт предоставляет только один XML, то, что вы делаете "изнутри", зависит от вас.Вы можете делать такие вещи, как схемы передачи для новых методов для проверки вызовов, сконструированных на клиенте, и т. Д.

  2. Служба RESTful - это еще один простой способ сделать это.Поскольку контракт REST является URL-адресом, добавить новое расширение так же просто, как предоставить новый формат URL-адреса.Вы можете сообщить клиенту через средство форматирования, как вызывать новые вызовы для методов расширения и управлять ими при создании приложения.

Реально, однако, я сомневаюсь в вашем конце шрифтабудет иметь возможность обрабатывать все крайние случаи и динамически создавать новые экраны и проверки по мере расширения серверной части.В этом случае лучшим подходом, по моему мнению, было бы создание приложения Silverlight в виде модульного приложения с использованием MEF.Если у вас есть расширение на сервере, вы можете просто предоставить расширение XAP для клиента.Вы можете сделать так, чтобы сервер перечислял XAP-файлы в каталоге для плагинов и отправлял их в приложение Silverlight, поэтому, когда новый станет доступным, он может динамически загружать их.XAP будет содержать код для подключения к новым контрактам WCF для расширенной функциональности.

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