Stian,
Merci pour la réponse rapide. J'ai regardé le screencast de Miguel Castro et c'était très instructif. Malheureusement, il ne couvre pas la situation Silverlight. Cependant, en utilisant cela comme point de départ, j'ai pu obtenir quelque chose de fonctionnel que d'autres pourraient trouver utile.
Créez deux assemblys: ServerDataContracts et SilverlightDataContracts (celui-ci en tant qu'ensemble silverlight). Dans chacun de les AssemblyInfo.cs ajoutez la ligne suivante:
[assembly: ContractNamespace("http://YourNamespaceUri",
ClrNamespace = "YourDataContractsNamespace")]
Ajouter tous vos DataContracts à l'assemblée de ServerDataContracts. Dans l'assembly SilverlightDataContracts, cliquez avec le bouton droit sur le projet (ou le sous-dossier) et sélectionnez "Ajouter un élément existant". Accédez aux DataContracts dans l'assembly ServerDataContracts et sélectionnez ceux que vous souhaitez ajouter. NE PAS HIT "Ajouter" !!! Au lieu de cela, cliquez sur la flèche vers le bas à côté de "Ajouter" et sélectionnez "Ajouter comme lien". Cela lie le projet SilverlightDataContracts aux fichiers existants dans le projet ServerDataContracts. Maintenant, lorsque vous en modifiez un, les deux projets obtiennent le changement. Lorsque vous compilez, les projets compilent séparément avec leurs cibles correctes.
Ajoutez maintenant l'assembly ServerDataContracts comme référence à votre projet de contrat de service. Faites de même pour votre assemblage SilverlightDataContracts vers votre application Silverlight. Lorsque vous ajoutez une référence de service de votre client Silverlight à votre service, elle ne doit pas générer les contrats de données. Il devrait plutôt utiliser ceux de votre assemblée.
J'ai réussi à obtenir ce résultat, mais il manque encore certaines des fonctionnalités fournies par les classes de contrat de données générées. Les classes générées implémentent INotifyPropertyChanged qui est extrêmement utile lors de la liaison de données dans silverlight/wpf. Bien que vous puissiez l'implémenter vous-même, il est assez fastidieux et votre code serveur doit maintenant exécuter tous ces gestionnaires d'événements sur chaque ensemble de propriétés, même si vous ne vous abonnerez probablement jamais à l'événement PropertyChanged sur le serveur.
Je suis toujours à la recherche d'un moyen plus propre de gérer cela. Il semblerait que silverlight 4 vous facilitera la tâche puisque vous pouvez utiliser le même assemblage dans le client et le serveur (le code compilé est compatible). Malheureusement, c'est trop loin pour mes besoins.
Cela devrait vraiment avoir été ajouté à votre question à titre d'information supplémentaire. – ChrisF