2009-06-25 7 views
1

J'ai un service WCF basé sur TCP auto-hébergé. Je suis en train de construire un projet qui consomme ce service, mais il semble y avoir au moins deux façons d'ajouter une référence de service à un projet et les deux produisent des proxys extrêmement différents. J'ai d'abord utilisé le "Ajouter une référence de service" du menu du projet, mais cela a généré un certain nombre de fichiers et même quelques schémas XML des principaux types .Net. Ensuite, j'ai essayé le SvcUtil qui ne produisait que deux fichiers, un proxy et un fichier de configuration contenant la référence de service et les paramètres de liaison, mais ...La bonne façon de créer des références de service WCF?

Dans les deux cas, les outils VS semblent reproduire des définitions de type même bien que j'ai fourni une référence à l'ensemble contenant le service et tous les types qu'il utilise. Par exemple, certaines de mes méthodes de service renvoient des collections génériques de classes Entity. Toutes les classes Entity sont définies dans un assembly que j'ai directement référencé depuis le projet consommateur, alors pourquoi redéfinir ces types? Je souhaiterais recevoir des conseils sur la consommation de services WCF qui renvoient des types d'entités et sur les meilleures pratiques qu'ils appliquent.

Répondre

2

Nous avons constaté que la référence de service d'ajout crée beaucoup de code inutile qui entrave le processus.

Nous sommes allés plus à un mode manuel de mise en place, il y a une introduction à cette méthode ici:

http://perseus.franklins.net/dnrtvplayer/player.aspx?ShowNum=0103

+1

Oui - mais encore une fois - que * SEULEMENT * travaille jamais dans un scénario où vous contrôlez * les deux * extrémités de la communication, et utiliser .NET et WCF sur les deux extrémités. Si c'est le cas - excellente façon de le faire! Mais rappelez-vous - c'est un scénario très limité dans le "monde réel". –

+0

Merci vraiment bonne vidéo, tout le monde qui développe des services WCF devrait regarder cela en premier, les droits VS sont terribles. – James

2

Oui, cela peut sembler double emploi dans votre cas concret - mais considérer cette : WCF est également conçu pour être interopérable, et dans les scénarios MOST, en particulier si vous avez un client non .NET qui appelle votre code, vous n'aurez pas l'assembly avec le contrat et les interfaces disponibles.

Donc, il n'y a vraiment rien, mais créer un proxy complet, qui contient toutes ces informations, afin de travailler dans toutes les circonstances possibles. Maintenant, si vous voulez vraiment éviter la duplication de contrats de données etc., vous pouvez les compiler dans leur propre assembly, puis utiliser le commutateur/r: (nom de l'assembly) lorsque vous appelez svcutil pour lui demander de réutiliser le code et contrats dans cet assemblage.

Marc

Questions connexes