Требуются ли атрибуты DataContract для WCF? - PullRequest
30 голосов
/ 07 мая 2011

Я пишу сервис WCF и его клиент. Я хочу отправлять / получать объекты моих пользовательских классов между сервисом и клиентом.

У меня есть 3 модуля

  • Служба WCF
  • клиент WCF
  • общая библиотека классов

Служба WCF и клиент имеют ссылки на общую библиотеку классов. Я не хочу отмечать весь свой класс атрибутами DataContract.

Итак, мой вопрос "Обязательны ли атрибуты DataContract для WCF?"

Я использую .NET 4 и netTcpBinding.

Ответы [ 4 ]

23 голосов
/ 07 мая 2011

Если я правильно помню (IIRC), если вы не используете формальные маркеры контракта данных, по умолчанию он действует как полевой сериализатор. Это будет работать, но не так просто для версии, так как частные изменения могут сломать клиент / сервер. IMO, вы всегда должны формально украшать типы WCF атрибутами data-contract / data-member. Он будет работать без них, но по неправильным причинам (изначально IIRC не работал без формальных маркеров).

7 голосов
/ 08 мая 2011

"Требуются ли атрибуты DataContract для WCF"

Технически, нет.Это зависит от того, используете ли вы DataContractSerializer или нет (который используется по умолчанию для многих привязок).

Существуют другие варианты:

  1. Рассмотрите альтернативные сериализаторы
  2. Попробуйте использовать Суррогаты контрактов данных (атрибуты по-прежнему необходимы где-то , но это потенциально означает, что вы можете оставить свой класс нетронутым, если это актуально)
  3. Положитесь на по умолчанию для сериализации для сериализации классов без атрибутов контракта данных
3 голосов
/ 07 мая 2011

Не обязательно использовать атрибуты DataContract, без них ваш сервис будет работать нормально.

Сказав это, я действительно не думаю, что ваш сервис и клиент совместно используют библиотеку классов - лучший подход к проектированию. Было бы намного понятнее, если бы вы выставляли свои типы через DataContracts.

Что произойдет, если когда-нибудь кто-то захочет использовать ваш сервис, но у него не будет доступа к общей библиотеке классов?

3 голосов
/ 07 мая 2011

Вы можете использовать несколько методов сериализации с WCF, это одна из приятных вещей, которые можно адаптировать. Посмотрите:

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

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