2016-12-27 2 views
0

Je suis nouveau au service WCF. Je suis conscient de trois façons de générer des procurations.Choisissez entre quel type de chemin de génération de proxy WCF nous devrions prendre?

  1. Utiliser référence service
  2. En utilisant SvcUtil
  3. En utilisant ClientBase

Mais je suis confus dans ce cas, je devrais utiliser quel type. Dans mon cas, je dois générer des proxys pour un service tiers pour lequel je n'ai pas de code de service. Je ne veux pas utiliser la référence de service d'ajout car cela me donne le problème suivant. Mentionné dans ce stackoverflow question. Donc je veux utiliser clientBase. Mais je pense que je ne peux pas l'utiliser sans utiliser la référence de service. Je suis assez confus quand devrions-nous choisir quel genre de procurations.

+0

Eh bien, n'ajoutez pas de références de service à vos projets de bibliothèque, seulement vos applications – MickyD

+0

Dans ce cas, je dois ajouter une référence de service à plusieurs endroits comme je le ferai avoir plusieurs applications utilisant ce service. Je ne pense pas que ce soit bon. – TBAG

+0

Ah, je n'ai pas réalisé, voir ma réponse ci-dessous – MickyD

Répondre

0

Dans mon cas, je dois générer des proxies pour un service tiers pour lequel je n'ai pas de code de service.

Je vais avoir plusieurs applications utilisant ce service.

Dans ce cas, vous feriez mieux d'utiliser SvcUtil car il peut générer une seule bibliothèque qui tous de vos projets peuvent utiliser, même si elles sont des bibliothèques .NET. Après qu'il est généré, vous pouvez toujours entrer et modifier.

Ajouter une référence de service d'autre part est très bien pour un seul .exe mais comme vous avez découvert, est gênant pour plusieurs applications que vous avez besoin de répéter le processus et vous vous retrouvez avec plusieurs définitions de types WCF est Je vais juste augmenter la maintenance. Assurez-vous de laisser la configuration du client WCF dans le fichier app.config de vos applications et non dans votre app.config de votre bibliothèque de classes (car la première ne peut pas être lue). Si votre fournisseur avait suivi "WCF the Manual Way… the Right Way" il aurait simplifié votre vie. Les puristes de SOAP diront cependant que la seule chose que le fournisseur fournit est un fichier XML SOAP WSDL à partir duquel vous devez quand même générer vos types. (Malheureusement, le comportement par défaut dans .NET est de retour à l'avant)

+0

ClientBase ne peut être utilisé que si je suis le propriétaire du service. Est-ce correct? – TBAG

+0

Eh bien, vous avez normalement besoin du type d'interface de service et, à moins que le fournisseur ne vous le fournisse, vous utilisez simplement celui généré lors de la génération du proxy client, qui à ce moment-là est trop tard. Vous pouvez aussi bien utiliser le code établi. Si le fournisseur vous donne une API sous la forme d'une bibliothèque client .NET, vous pouvez créer votre propre proxy en utilisant 'ClientBase' avec l'interface qu'ils fournissent. Mais cela ne semble pas être le cas. Pour répondre à votre question, n'importe qui peut utiliser 'ClientBase' mais vous avez besoin du contrat de service en premier – MickyD

+0

Après la génération du proxy en utilisant Svcutil, l'attribut 'contrat' est invalide - La valeur 'xxx' n'est pas valide selon son type de données 'clientContractType' - La contrainte d'énumération a échoué. – TBAG