2010-03-30 1 views
1

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

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

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

Спасибо всем

ответ

0

Вы не можете передать Ленивый загруженный объект с помощью WCF.

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

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

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

3

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

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

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

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

Только что понял, сколько лет этот вопрос. Ой, хорошо. – Brook

+0

Честно говоря, это было полезно для меня сегодня. :) – Mayo