NHibernate & WCF в версии 3.0 - PullRequest
1 голос
/ 31 марта 2010

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

Я хочу использовать NHibernate, но я видел несколько разных способов решения проблемы с сериализацией. Это обрабатывается в 3.0? Я заметил wcf_context внутри грузовика: D

Если это не обработать, может ли кто-нибудь указать мне правильное направление?

Спасибо всем

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

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

Одним из инструментов, который особенно полезен для отображения между сущностями и DTO, является AutoMapper . Независимо от того, используете ли вы AutoMapper или просто «лево-правое» кодирование, это предотвратит проблему отложенной загрузки / отложенного выполнения, поскольку выполнение отображения приведет к выполнению.

Существует ряд причин, по которым возвращение объекта из службы может быть не очень хорошей идеей, вот несколько (по большинству из них существуют разные мнения)

  • В зависимости от вашей настойчивости (в вашем случае nhib) у вас может быть поведение (отложенное выполнение) или состояние, связанное с вашими сущностями, которые не будут корректно выполняться в другом приложении или сервере
  • Возврат сущности приводит к тому, что сервисный уровень часто приводит к вызовам, которые очень похожи на CRUD, приводят к очень болтливому сервисному уровню и очень не-SOA
  • Различные вызовы могут требовать больше или меньше данных, чем просто сущность, DTO дает вам возможность свернуть именно то, что вам нужно, и ничего, что вы не делаете.
  • Если вы пытаетесь создать повторно используемый сервисный уровень, вы не должны предполагать, что ваши клиенты имеют доступ к вашей сущности или доменной логике, кроме той, которая находится в вашем сервисе. они могут быть написаны в другом приложении, на другом языке и т. д. Если ваши объекты используются для перемещения данных, вы склонны забыть об этом.
0 голосов
/ 31 марта 2010

Вы не можете передать загруженный объект Lazy, используя WCF.

Есть несколько способов обойти это, но есть ошибка, которая будет исправлена ​​в следующей версии WCF (скоро, апрель 2010)

Кроме этого, они удачно удаляются вместе, пока вы определяете объекты с помощью DataContract.

Существует также проблема с сериализацией списков - вам нужно сгенерировать прокси с использованием svcutil с определенным флагом, или случится что-то плохое (списки становятся массивами, и вы не можете добавлять больше элементов) (если вы не используете определенный вид списка, с которым согласны и WCF, и NHibernate) - посмотрите это (списки Nhiberate и WCF) -

...