Расширение службы WCF и ее автоматически созданная ссылка на клиентскую службу

Я относительно новичок в разработке .Net и C #, и у меня возникла проблема с развязкой служб WCF из приложения в создаваемую мной сетевую DLL. Цель библиотеки DLL - предложить простой способ размещения службы и доступа к ней с сервера и клиентского приложения, а также добавить некоторые функции к базовой службе для контрольного сигнала и автоматического переподключения без необходимости для каждого приложения указывать методы контрольного сигнала. в своих службах WCF и без / без того, чтобы приложения управляли таймером для автоматического переподключения.

DLL предлагает классы ServiceServer и ServiceClient, которые преследуют следующие цели:

ServiceServer :

  • Создает экземпляр ServiceHost и управляет им.
  • Разместите службу извне DLL (передается как универсальная).
  • Добавьте операции пульса в службу, которую нужно разместить, а также другие операции, общие для всех наших клиент-серверных приложений.

ServiceClient :

  • Создает и делает ссылку на клиентскую службу доступной для клиентского приложения. Ссылка на службу (автоматически сгенерированная) также передается из приложения как универсальная.
  • Добавьте методы пульса в ссылку на службу для клиента, а также другие операции, общие для всех наших клиент-серверных приложений.
  • Автоматическое переподключение с использованием таймера или подобного.

До сих пор я безуспешно пытался использовать частичные классы, дженерики и статические методы расширения. Проблема в том, что для того, чтобы моя DLL была полностью отделена, я получаю и создаю ссылку на службу и службу с использованием универсальных шаблонов; Я не могу расширить полученный универсальный тип с помощью любого из этих подходов.

Я в основном пытаюсь расширить ссылку на клиентскую службу дополнительными методами, чтобы иметь возможность отправлять биения и т. автоматическое переподключение. Точно так же я хочу расширить службу, которую класс сервера получает в качестве параметра, чтобы добавить операции и реализацию кода пульса сервера, а в конечном итоге и другие методы, общие для всех приложений.


person Form    schedule 14.09.2010    source источник


Ответы (2)


Возможно, вы захотите изучить это решение для автоматической реализации слышимости в службах wcf.

http://weblogs.asp.net/cibrax/archive/2010/05/17/enables-service-availability-in-wcf-services.aspx

Решение также предоставляет клиенту метод расширения.

Спасибо, Пабло.

person Pablo Cibraro    schedule 15.09.2010

Нет, так не пойдет.

Когда вы определяете службу, вы сначала создаете один или несколько контрактов на обслуживание (лучше всего использовать интерфейсы). Интерфейс контракта службы должен быть помечен атрибутом ServiceContract, и каждый открытый метод, используемый в службе, должен быть отмечен атрибутом OperationContract. Затем вы создаете класс обслуживания, который реализует эти интерфейсы. Такой класс может быть представлен как служба WCF с конечной точкой для каждого интерфейса (контракт службы).

Никакой другой подход не работает. Вы не можете добавлять методы расширения, использовать общие или что-то еще, чтобы «расширить» реализованную услугу. Вы можете унаследовать существующий класс обслуживания и добавить дополнительный интерфейс. Очевидно, что это не кодовое решение, если только вы не создадите очень продвинутый код для генерации динамического типа данных во время выполнения (= выдача MSIL во время выполнения).

person Ladislav Mrnka    schedule 14.09.2010
comment
Спасибо, что нашли время ответить на этот вопрос. Я удивлен, что нет простого способа отделить код WCF от приложения или разместить две службы на конечной точке одновременно. Думаю, я забуду эту идею. - person Form; 15.09.2010
comment
Проверьте ответ Пабло, похоже, я ошибался, и есть решение для добавления операций в существующий сервис. - person Ladislav Mrnka; 15.09.2010