WCF и замены членов метода - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть объект вида:

public class Report
{
   m_filter1;
   m_filter2;
   ...
   m_filtern;

   AddFilter1(int a)
   {
      m_filter1 = /* some logic of filtering results using the value of a */
   }

   ...
}

Также соответствующий статический метод, используемый для использования класса Report:

public static List<Result> GetResults(Report r)
{
   /* use r to query the DB and return an array of results */
}

Поскольку этот метод должен быть представлен с использованием WCF, я также должен сделать класс Report доступным для «внешнего» (клиентского) использования, но его методы-члены, которые скрывают внутреннюю структуру, нельзя использовать в прокси-классе WCF сгенерировано для него.

Поскольку я не могу разоблачить закрытых членов Report, как я могу элегантно решить проблему методов-членов, необходимых для потребляющей стороны?

Я подумал о контракте на обслуживание в форме:

public class ReportingService
{
   Report m_report = new Report();

   AddFilter1(int a)
   {
      m_report.AddFilter1(a);
   }

   ...
}

То есть, чтобы обернуть методы-члены класса Report с использованием одного экземпляра Report, но это накладывает ограничение на использование одного не поточно-ориентированного объекта, совместно используемого всеми вызовами службы.

Есть что-нибудь основное, что я здесь упускаю? я довольно новичок в WCF, поэтому я, вероятно, упустил из виду простую схему решения этой проблемы.

Спасибо, Harel

1 Ответ

1 голос
/ 13 апреля 2010

Ну, как вы заметили, WCF only когда-либо передает данные через соединение сервер-клиент - и это абсолютно преднамеренно. WCF обрабатывает сериализованные сообщения - только данные. Подумайте об этом на секунду: WCF полностью совместим - ваш клиент может быть PHP-сайтом, который вам звонит - как эти парни смогут выполнить ваш код .NET ??

Так что, в основном, рекомендация по проектированию такова: убедитесь, что ваши контракты с данными - это просто: чистые данные, никакого поведения, никаких методов, ничего подобного.

Если вам нужно что-то сделать с частью данных - определите метод обслуживания для этого! В этом вся суть сервис-ориентированной архитектуры.

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

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