Я закодировал контракт данных из примеров кода, и моя служба запущена, но я явно не установил контракт данных.

На какой границе контракт данных привязан к сервисному контракту?

wcf
1
JL. 5 Окт 2009 в 21:38
Вы говорите о самом DataContract или DataContractSerializer, который обрабатывает сериализацию DataContract?
 – 
Justin Niessner
5 Окт 2009 в 21:53

2 ответа

Лучший ответ

Любой сложный тип (то есть больше, чем int или string), который используется любой из операций службы (методы, отмеченные [OperationContract]), должен быть [DataContract].

Операции / методы службы переводятся в действия SOAP в вашем файле WSDL (язык описания веб-служб). Любые передаваемые данные должны быть чем-то, что может быть выражено в схеме XML (файл XSD). Для int, string и т. Д. Существуют основные предопределенные типы XSD, но все, что выходит за рамки этого - тип Customer или что-то еще, с чем вы имеете дело, должно быть определено таким образом, чтобы его можно было преобразовать в Схема XSD.

Помните: в конце концов, службы WCF предназначены для взаимодействия с другими системами, такими как Java, PHP и всем остальным, о чем вы можете мечтать. Таким образом, все в контрактах на обслуживание - все операции и все обрабатываемые данные - должно быть в формате, который может быть выражен в файлах WSDL (операции) и XSD (данные), которые являются широко признанными отраслевыми стандартами.

На данный момент WCF в .NET 3.5 очень ясен - вы должны определить классы и пометить их атрибутом [DataContract], а также любыми полями или свойствами в этих классах, которые вы хотите предоставить файлам WSDL / XSD (и таким образом, к вашему определению службы) должны быть явно помечены атрибутом [DataMember].

Это проясняет ситуацию?

MArc

2
marc_s 5 Окт 2009 в 22:58

DataContractSerializer - это то, что по умолчанию используется для сериализации параметров операции и возвращаемых значений. Например, если у вас это на сервере:

[OperationContract]
SomeType DoSomething(SomeOtherType x);

... тогда DataContractSerializer будет использоваться для десериализации SomeOtherType (преобразовать его из XML), а затем сериализовать SomeType (преобразовать его в XML)

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

Дополнительная информация здесь: http://msdn.microsoft.com/en-us/ библиотека / ms731923.aspx

1
Eugene Osovetsky 5 Окт 2009 в 22:08