2009-06-03 3 views
2

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

У меня есть существующая библиотека классов, которая имеет пространства имен для типов, бизнес-логики и доступа к данным. Классы в пространствах имен логических данных и доступа к данным являются статическими и имеют базовые методы crud для заполнения экземпляров типа данными или получения экземпляров типов, которые уже заполнены и вставляются или обновляются в базе данных.

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

Каждый посетитель WCF, который я вижу, создает объекты домена в проекте службы, но я не хочу, чтобы мои объекты были определены в двух местах.

Поэтому я думал, что могу ссылаться на сериализацию в существующей библиотеке классов и отмечать классы классов как [DataContract] и свойства как [DataMember]. Затем в проекте WCF создайте интерфейсы [ServiceContract] с методами [OperationContract] для соответствия статическим логическим классам и методам из существующей библиотеки, которую я хочу открыть. Затем из проекта WCF ссылайтесь на существующую библиотеку классов и реализуйте интерфейсы WCF, используя в ней методы, которые вызывают существующие библиотечные логические методы, которые возвращают существующие типы библиотек.

Это хороший образец?

ответ

5

Звучит неплохо, но переоснащение сериализации имеет тенденцию быть более сложной задачей, чем кажется на первый взгляд. Я бы предположил, что вы создаете некоторые легкие контракты данных на уровень сервиса, а затем создаете небольшой уровень, который находится между вашим уровнем обслуживания и бизнес-уровнем, чтобы преобразовать контракты данных в бизнес-объекты и наоборот.

1

Предполагая, что ваш бизнес-объект может быть сериализован (имеет атрибут Serializable), одним из подходов может быть создание объекта DataContainer, который будет вашим контрактом на данные. Этот объект будет использоваться в ваших методах CRUD.

Например ваш интерфейс может быть Update (DataContainer объект) Вставка (DataContainer объекта)

и т.д.

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

+0

Thanks Max. На самом деле я не упоминал об этом, но одна из вещей, которые я пытаюсь сделать, - это не отправлять библиотеку потребителям услуги. –

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