2009-09-26 7 views
6

Il est bien connu comment créer un service WCF "contrat premier" où la première étape consiste à définir les ServiceContract s et DataContract s.Schema First WCF Development

Comment devrait-on approcher le développement WCF si l'on a le «schéma d'abord». En d'autres termes, un schéma XSD a été développé indépendamment. Le service ne doit pas dévier du schéma déjà défini. Comme une complication, le schéma pourrait utiliser des fonctionnalités qui ne se traduisent pas en DataContract (les capacités DataContract, après tout, sont assez minimes).

L'utilisation de XDocument sur le serveur ou le côté client pour l'ensemble du document serait bonne et bonne. (L'utilisation de XDocument serait grandement préférable à tout ce qui concerne le XmlSerializer qui semble malheureusement être tombé en désuétude sans remplacement). C'est une exigence que les métadonnées/WSDL rapportent correctement le schéma réel selon les normes. Il ne peut pas signaler un schéma "générique" tel que xsd: any. (Comprendre comment faire face à ces exigences WSDL est la partie qui me donne le plus de problèmes.)

(questions/réponses similaires ici ne traitent pas XDocument ou exigences WSDL.)

+1

Si votre schéma n'est pas compatible avec le sérialiseur DataContract, vous aurez des problèmes, je dirais. Quelles fonctionnalités utilisez-vous dans votre schéma qui ne sont pas prises en charge par le sérialiseur de contrat de données? –

+0

Plusieurs. Les attributs XML en sont un. Par exemple . –

Répondre

4

Si vous avez déjà la XSD, le seul lien manquant entre ceux-ci et une interface WCF est le WSDL. Une fois que vous avez un WSDL, vous pouvez utiliser svcutil.exe pour générer des interfaces WCF et des classes correctement annotées avec les attributs requis.

Vous pouvez le faire à la dure et écrire le WSDL à la main, mais vous devez aussi considérer l'outil WSCF.

+0

Merci, mais cela utilise System.Xml.Serialization que je préférerais ne pas utiliser. XmlSerializer semble être une partie importante de l'interopérabilité WCF mais MS ne semble pas intéressé à l'améliorer. :(Ce que je cherche ici est un moyen d'utiliser XDocument et d'avoir toujours les métadonnées WSDL attendues du service –

+4

En fait, WCF utilisera ** DataContractSerializer ** par défaut, ce qui est une bête différente de XmlSerializer est optimisé et plus rapide en général, utilise un modèle spécifique de "opt-in" (plutôt que d'opt-out), mais a d'autres limitations (par exemple, ne supporte pas les attributs dans le XML sérialisé) –