Контракты данных WCF, как они вписываются в картину - PullRequest
1 голос
/ 05 октября 2009

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

По какой границе контракт данных связан с контрактом на обслуживание?

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

Любой сложный тип (т. Е. Больше, чем 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].

Это делает вещи немного яснее?

1018 * MARC *

1 голос
/ 05 октября 2009

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

[OperationContract]
SomeType DoSomething(SomeOtherType x);

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

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

Подробнее здесь: http://msdn.microsoft.com/en-us/library/ms731923.aspx

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