2012-06-29 4 views
0

в атрибуте WCF DataContract не требуется?атрибут datacontract требуется в WCF?

У меня есть класс, класс которого не отмечен DataContract или свойство с DataMember.

Когда я развертываю службу wcf на 4 серверах, 4 службы работают нормально на 3-х серверах и сбой на одном сервере с сообщением «Тип« Класс »не может быть сериализован. Рассмотрите маркировку его атрибутом DataContractAttribute и отметьте все его членов, которые вы хотите сериализовать с атрибутом DataMemberAttribute. "

Итак, есть ли какие-либо настройки в web.config или machine.config или в IIS, где я могу поручить использовать сериализатор в коде? или

Я могу указать использование сериализатора по умолчанию, если атрибут не указан?

Благодаря, Krishna

ответ

0

Как указано на MSDN

[DataContractAttribute] Указывает, что тип определяет или реализует контракт данных и сериализуемый по сериализатором, такие как DataContractSerializer. Для того, чтобы их типа сериализации, авторы типа должны определить контракт данных для их типа

Вы должны украсить свои классы с DataContract и DataMember атрибутами, которые будут использоваться в службе WCF.

+0

я удивительно, почему он работает на 3 сервере, а не на 1 сервер, даже если я не добавил DataContract атрибута для этого одного класса – Krishna

0

Да, потребуется атрибут [DataContract] для всех классов, которые будут отправляться между сервисом WCF и любыми клиентами.

Все свойства этого класса, которые могут содержать данные, которые вы хотите отправить, должны быть отмечены атрибутом [DataMember]. Это позволяет определить класс, который содержит как сериализуемые, так и несериализуемые данные, но я бы не рекомендовал его.

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

+0

я знаю, что вы сказали, но я удивление, почему это работает на 3 серверах, а не на 1 сервере, хотя я не добавил атрибут DataContract для этого единственного класса – Krishna

+0

Нет, вам не нужен атрибут для всех классов; если вы используете его в контракте на обслуживание, WCF предполагает, что вы хотите, чтобы это был контракт с данными. –

4

Нет, DataContractAttribute не требуется - WCF выведет правила сериализации. Единственное, что я могу проверить, это то, что версия .NET одинакова на всех ваших серверах.

Подробнее: WCF Data Contract/Serialization

+0

+1 для проверки версии .NET – Seph