2009-10-05 6 views
1

J'ai codé dans le contrat de données à partir d'échantillons de code et mon service est en cours d'exécution, mais je n'ai pas explicitement défini le contrat de données.Les contrats de données WCF, comment ils s'intègrent dans l'image

À quelle limite le contrat de données est-il lié au contrat de service?

+0

Parlez-vous de la DataContract lui-même ou DataContractSerializer qui gère la sérialisation du DataContract? –

Répondre

2

Tout type complexe (à savoir plus d'une int ou string) qui est utilisé par l'une des opérations de service (méthodes marquées [OperationContract]) doit être un [DataContract].

Les opérations/méthodes de service sont en cours de traduction en actions SOAP dans votre fichier WSDL (Web Service Description Language). Toute donnée transmise doit être quelque chose qui peut être exprimé dans un schéma XML (fichier XSD). Pour int, string, etc., il existe des types XSD prédéfinis de base, mais tout ce qui est au-delà - un type Customer ou tout autre type - doit être défini d'une manière qui peut être transformée en un schéma XSD. Rappelez-vous: après tout, les services WCF sont conçus pour être interopérables avec d'autres systèmes comme Java, PHP et tout ce que vous pourriez imaginer. Donc tout ce qui se trouve dans les contrats de service - toutes les opérations et toutes les données exploitées - doit être dans un format qui peut être exprimé dans un fichier WSDL (opérations) et XSD (données) qui sont des normes industrielles largement acceptées. Pour l'instant, WCF dans .NET 3.5 est très explicite - vous devez définir des classes et les marquer avec l'attribut [DataContract], et tous les champs ou propriétés dans les classes que vous souhaitez exposer aux fichiers WSDL/XSD (et donc à votre définition de service) doit être explicitement marqué avec un attribut [DataMember].

Est-ce que cela rend les choses un peu plus claires?

MArc

1

Le DataContractSerializer est ce qui est utilisé par défaut pour sérialiser les paramètres d'opération et les valeurs de retour. Par exemple, si vous avez cela sur le serveur:

[OperationContract] 
SomeType DoSomething(SomeOtherType x); 

... alors DataContractSerializer sera utilisé pour désérialiser SomeOtherType (convertir à partir de XML), puis sérialiser UnType (convertir en XML)

DataContractSerializer comprend plusieurs types différents, mais la méthode recommandée pour créer un type que DataContractSerializer comprend est de le marquer avec l'attribut [DataContract].

Plus d'infos ici: http://msdn.microsoft.com/en-us/library/ms731923.aspx

Questions connexes