Понимание того, как работает WCF - PullRequest
3 голосов
/ 01 марта 2011

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

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

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

Ответы [ 2 ]

5 голосов
/ 01 марта 2011

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

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

  • те же шаги - в основном в обратном направлении - для ответа

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

1 голос
/ 01 марта 2011

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

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

...