2011-11-08 4 views
1

Je crée une application WP7 qui se connecte à SQL DB via WCF. Mais après avoir ajouté le proxy client et l'avoir testé, j'ai eu cette erreur.Application WP avec WCF

Le nom du type ou espace de noms IExtensibleDataObject n'existe pas dans l'espace de noms System.Runtime.Serialization (vous manque une référence d'assemblage?)

Répondre

0

Cela peut valoir la peine de vérifier votre besoin d'implémenter IExtensibleDataObject. Cela est conçu pour la compatibilité ascendante entre les contrats de données de différentes versions, voir Forward-Compatible Data Contracts.

Si vous (1) ne travaillez pas sur un scénario nécessitant des données de déclenchement indirect (par exemple, envoyer un message à un service et lui envoyer un message avec le même contrat de données) et (2) n'ont pas besoin de prendre en charge un client utilisant le nouveau contrat de données envoyant un message à un service qui ne comprend que la version précédente du contrat de données, qui retourne ensuite un message en utilisant les données envoyées à la nouvelle version du client. Bien que cela puisse être un scénario important, ce n'est pas ce que tout le monde doit supporter. Souvent, la rétrocompatibilité est suffisante. Et l'approche IExtensibleDataObject suppose que les données supplémentaires qui sont dans le nouveau contrat de données peuvent être ignorées par la logique de l'ancien service, et juste retournées intactes à l'appelant. Encore une fois, cela s'applique à certains cas et pas à d'autres. Dans le cas le plus simple, qu'est-ce qui vous obligerait à prendre en charge une nouvelle version de l'application de téléphone qui déclenche des données dans une ancienne version du service?

Si vous ne pensez pas que vous avez besoin de cette capacité, alors il pourrait être utile d'envisager de retirer le contrat IExtensibleDataObject de votre service. Si vous avez besoin de ce style de compatibilité ascendante, alors une autre option serait de travailler sans proxies générées par WCF, de créer le canal et d'envoyer et de recevoir System.ServiceModel.Channels.Messages et de traiter le message SOAP vous-même, y compris décider ce que vous voulez faire avec des éléments XML supplémentaires qui ne faisaient pas partie du contrat original. Certainement un sujet avancé, mais cela peut être fait si vous y mettez votre esprit.