Расширение службы WCF и ее автоматически сгенерированной ссылки на службу клиента - PullRequest
2 голосов
/ 14 сентября 2010

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

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

ServiceServer:

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

ServiceClient:

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

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

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

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010

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

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

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

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

0 голосов
/ 14 сентября 2010

Нет, так работать не будет.

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

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

...