Question

J'ai un service WCF basé sur TCP auto-hébergé. Je suis en train de construire un projet qui utilise 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 mandataires extrêmement différents. J'ai d'abord utilisé la référence "Ajouter un service". depuis le menu du projet, mais cela a généré pas mal de fichiers et même des schémas XML des types .Net de base. Ensuite, j’ai essayé le SvcUtil qui ne produisait que deux fichiers, un proxy et un fichier de configuration contenant la référence du service et les paramètres de liaison, c’est bien mieux mais ...

Dans les deux cas, les outils VS semblent reproduire les définitions de type même si j'ai fourni une référence à l'assembly 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 d'entité. Toutes les classes d'entité sont définies dans un assemblage que j'ai directement référencé à partir du projet consommateur, alors pourquoi redéfinir à nouveau ces types?

Je serais reconnaissant si un organisme pouvait donner des conseils sur la consommation de services de la WCF qui renvoient des types d'entités et les meilleures pratiques suivies.

Était-ce utile?

La solution

Nous avons constaté que la référence de service d'ajout crée beaucoup de code inutile qui gêne plus que nécessaire.

Nous sommes passés à une méthode manuelle de configuration, voici une introduction à cette méthode:

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

Autres conseils

Oui, dans votre cas concret, cela peut sembler être une duplication, mais considérez ceci: WCF est également conçu pour être interopérable, et dans les scénarios MOST, en particulier si un client non.NET appelle votre code, vous ne le ferez pas. avoir l'assemblage avec le contrat et les interfaces disponibles.

Donc, il n'y a vraiment rien, MAIS créer un proxy complet, contenant toutes ces informations, afin de fonctionner 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 assemblage, puis utilisez le commutateur / r: (nom de l'assembly) lorsque vous appelez svcutil pour lui demander de réutiliser le code. et des contrats dans cette assemblée.

Marc

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top