2010-02-11 4 views
0

Nous avons beaucoup de services WCF qui ne sont utilisés que par notre propre code; le code qui les utilise est principalement dans les mêmes fichiers de solutions qui contiennent les services.Comment refactoriser les contrats de données dans les services WCF?

Cependant, ils n'utilisent pas d'assembly partagé pour les contrats, donc chaque fois qu'un contrat de données est modifié, la référence au service doit être mise à jour manuellement dans tous les projets qui utilisent le service. (Ensuite, le code doit être corrigé à la main)

Alors comment faire un simple refactoring comme renommé un élément de données dans un contrat de données?


Est-il possible de mettre à jour toutes les références à des services en une seule solution avec une seule commande, plutôt que d'avoir à cliquer sur chaque référence dans chaque projet?

Répondre

1

Vous avez peut-être déjà répondu à votre propre question ici. Déplacez vos contrats de données vers un projet "Contrats" partagé, ce qui vous permettra d'utiliser l'option Refactor -> Rename intégrée dans Visual Studio pour changer le nom, la modification étant reflétée dans tous les projets dans le Solution.

Mise à jour

Pour clarifier les choses, le projet des contrats est une « organisation » interne de vos contrats. Cela permet à plusieurs de vos projets de référencer un ensemble de contrats. Par exemple ...

Le service WCF expose "List GetCustomerById (int id)".

Le service WCF peut appeler une couche de traitement, qui peut avoir besoin de calculer quelque chose en utilisant un autre projet, etc. Tous ces projets peuvent utiliser la définition unique "Client" de votre projet Contrats.

Tout consommateur du service WCF obtiendrait la définition du client via la référence de service. Vous ne partagez pas votre projet Contrats ou n'envoyez pas la DLL pour son utilisation.

+0

On m'a dit que nous ne pouvions pas utiliser un projet de contrat partagé car cela posait un problème de versionnement lorsque des "correctifs" sont faits. Par exemple, l'assemblage du contrat aux deux extrémités peut avoir été construit à différents moments dans la configuration d'un client. Il y a eu beaucoup de problèmes dans le passé avec ce genre de choses et .net remoting, je ne sais pas si c'est un vrai problème avec WCF, ou juste que les gens ne veulent pas faire ce que les livres disent que vous ne devriez pas faire . –

+0

Vous ne fournissez pas le projet de contrats à une partie externe - ils obtiendraient tous les contrats via le service. Cela ne ferait aucune différence pour les consommateurs de votre service. Vous l'utilisez simplement pour organiser les contrats et les partager parmi vos projets internes. Je vais ajouter plus de détails à ma réponse ... – Fenton

1

Avec vos paramètres actuels, vous ne pouvez pas le faire car vous régénérez le proxy à chaque fois. C'est une bonne chose du point de vue de la SOA, car le contrat de données ne devrait pas changer très souvent. Mais si vous contrôlez à la fois le client et le service et que c'est tout .Net, vous pouvez faire ce que Shonee a suggéré. Utilisez l'option/r dans svcutil pour générer le proxy à partir de l'assembly commun. Ensuite, vous pouvez refactoriser facilement.

Questions connexes