WCF - Сложные объекты - KnownTypes - PullRequest
2 голосов
/ 27 октября 2010

Ладно, не знаю, как правильно составить слово, но постараюсь изо всех сил.

У меня есть несколько служб WCF, которые настроены и работают в ожидании объекта для обработки.

WCFServiceA
WCFServiceB
WCFServiceC

Служба A выполнит некоторую обработку и решит отправить объект в Службу B или C.

Так что мой объект имеет атрибут [DataContract] для всех классов в нем и [DataMember] для всех свойств.

Пока все хорошо.

Но теперь я потерял все функциональные возможности моего объекта, поскольку теперь это в основном сериализованная версия объекта.

Так же, как и всенаилучшая практика, если я хочу использовать полный сложный объект, чтобы включить одну и ту же сборку во все 3 службы в качестве ссылки и передать все как "KnownTypes" ??Предоставление базовых DataContract и DataMember для всего, что использует сервисы, которые не знают этих типов, чтобы они все еще могли создавать эти объекты для сервисов, с которыми будут работать сервисы?

Надеюсь, я правильно сформулировал это, и вы понимаетемой вопрос здесь.

: РЕДАКТИРОВАТЬ: Чтобы попытаться уточнить.

К объекту, который я отправляю, может быть прикреплена «Политика», этот объект политики является классом и может быть одним изнесколько типов: транспортное средство, дом, жизнь, домашние животные и т. д.

Но фактический тип не будет известен службе приема.Отсюда и необходимость KnownTypes.

Я думаю, что я только что ответил на свой вопрос !!:)

1 Ответ

1 голос
/ 27 октября 2010

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

Использование известных типовиногда может привести к проблемам с обратной совместимостью, когда вы хотите обновить объекты в режиме реального времени в зависимости от настроек.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...