2011-03-01 2 views
3

Я использую службу WCF между пользовательским интерфейсом клиентской стороны (Silverlight 3.0) и уровнем данных. Мы используем NHibernate для доступа к базе данных. Поэтому, пожалуйста, скажите мне, верно ли мое понимание ниже или нет:Понимание того, как работает WCF

  • UI вызывает WCF для метода сохранения (например,).
  • WCF имеет в нем метод сохранения, который фактически инкапсулирует метод сохранения из объекта данных .
  • Метод Data Access Object Save в свою очередь инкапсулирует метод сохранения по умолчанию NHibernate, который фактически сохраняет некоторые бизнес-объекты в базу данных.

Также может кто-то сказать мне, как мы передаем объекты из WCF на уровень пользовательского интерфейса (Silverlight 3.0) и наоборот. Я читал, что для этого мы используем DTO. Но как работает DTO? Соответствуют ли они «Контрактам данных» в WCF? Если нет, то DTO объявляется на стороне WCF (сервер) и на стороне клиента?

+1

Большое спасибо за напоминание мне о правилах. И жаль, что не последовал за ними. –

ответ

5

Нет, не совсем ....

  • UI вызывает метод прокси-на стороне клиента Save
  • ФОС выполнения останавливает вызов и все параметры, передаваемые в, и упорядочивает их в сообщение (как правило, сериализовать сообщение XML)
  • ФОС выполнение отправляет сериализированное сообщение через какой-то транспортную среды (все, что есть)
  • на стороне сервера, WCF во время выполнения принимает входящее сообщение
  • сообщения десериализируются, соответствующий класс и метод для обработки он идентифицируется
  • обычно: новый экземпляр класса обслуживания экземпляра для обработки запроса
  • ФОС выполнение распаковывает параметры и вызывает, что соответствующее сообщение на классе обслуживания

  • же шаги - в основном задом - сделаны для ответа

важного момента: единственного между т он клиент и сервер является сериализованным сообщением (который может быть отправлен по электронной почте или голубиного курьеру) - нет никакого другого соединения - нет «удаленного объект вызова» или что-нибудь подобных на всех

+1

Большое спасибо за ваш ответ. –

+0

Я получил концепцию сообщений в XML, передаваемых при использовании WCF.Я понимаю, что если мы хотим передать значения объекта Employee в пользовательский интерфейс из WCF, мы объявляем Employee as Data Contract и передаем значения в WCF и из него. Если я ошибаюсь, пожалуйста, исправьте. Также, если это так, то класс Employee здесь в некотором роде представляет собой DTO? –

+0

@ тахока: ты абсолютно прав. DataContract описывает, как объект CLR будет сериализован в сообщение. И да - эти объекты обычно представляют собой объекты передачи данных - просто свойства, отсутствие функциональности –

1

marc_s упоминает прокси-серверы на стороне клиента, которые могут быть сгенерированы через service references в вашем проекте Silverlight. Сгенерированные прокси-серверы достаточно приличные и предоставляют асинхронную модель для запуска запросов со стороны Silverlight; они будут выглядеть в основном как удаленные вызовы процедур.

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

+0

Хорошая точка - но основная посылка не меняется - WCF по-прежнему не обменяет ничего, кроме сериализованных сообщений, нет никакого «удаленного объекта» подключения любого типа ... –

+1

Полностью согласен. Я поднял ваше описание обмена, возможно, использовал его в разговоре (с отказом от ответственности!). В моем посте я пытался добавить, как заставить этот обмен работать. – ale

Смежные вопросы