Имеются ли атрибуты DataContract для WCF
Я пишу службу WCF и его клиент. Я хочу отправлять/получать объекты своих пользовательских классов, между сервисом и клиентом.
У меня есть 3 модуля
- Служба WCF
- Клиент WCF
- общая библиотека классов
Оба сервиса WCF и клиент имеют ссылки на общую библиотеку классов.
Я не хочу отмечать все мои классы атрибутами DataContract.
Итак, мой вопрос: "Требуются ли атрибуты DataContract для WCF?"
Я использую .NET 4 и netTcpBinding.
Ответы
Ответ 1
Если я правильно помню (IIRC), если вы не используете формальные маркеры данных, они по умолчанию действуют как полевой сериализатор. Это будет работать, но менее легко для версии, поскольку частные изменения могут сломать клиент/сервер. ИМО вы всегда должны формально украшать типы WCF атрибутами data-contract/data-member. Он будет работать без них, но по неправильным причинам (IIRC, изначально он не работал без официальных маркеров).
Ответ 2
"Требуются ли атрибуты DataContract для WCF"
Технически, нет. Это зависит от того, используете ли вы DataContractSerializer или нет (это по умолчанию используется для многих привязок).
Существуют и другие варианты:
- Рассмотрим альтернативные сериализаторы
- Попробуйте использовать суррогаты данных контракта (атрибуты по-прежнему требуются где-то, но это потенциально означает, что вы можете оставить свой класс нетронутым, если это так)
- Полагайтесь на значения по умолчанию для сериализации, если вы сериализуете классы без атрибутов Data Contract
Ответ 3
Вы можете использовать несколько методов serializaton с WCF, это одна из приятных приспосабливаемых вещей. Посмотрите:
http://msdn.microsoft.com/en-us/magazine/cc163569.aspx
Ответ 4
Не нужно использовать атрибуты DataContract, ваша служба будет работать отлично.
Сказав это, я действительно не думаю, что ваш сервис и клиент совместно используют библиотеку классов - лучший подход к дизайну. Было бы намного яснее, если бы вы открыли свои типы через DataContracts.
Что произойдет, когда когда-нибудь кто-то захочет использовать вашу службу, но не имеет доступа к общей библиотеке классов?