Créer un client WCF sans proxy généré automatiquement

regarder

WCF ChannelFactory vs générateur de proxy

Il semble que la meilleure pratique pour créer un client WCF consiste à créer un proxy (non généré automatiquement).

Je cherche en ligne depuis un moment et je n’ai trouvé aucun exemple complet (classe de proxy, web.config)

Pourriez-vous fournir un exemple ou des liens vers des ressources?

Cet article concerne exactement ce que vous demandez, je crois:

La WCF à la main … la bonne façon

Après avoir partagé cela, cependant, la création manuelle de vos mandataires n’est probablement pas toujours la meilleure utilisation possible de votre temps. Cet article présente d’excellentes raisons de le faire: vous aurez certainement plus de contrôle, vos clients auront peut-être plus de facilité, etc. comment utiliser exactement le proxy que vous fournissez peut être un problème.

Il y a une raison pour laquelle WCF autorise l’échange et la découverte de métadonnées et VS créera automatiquement des mandataires pour vous.

Quoi qu’il en soit, c’est un article intéressant et une technique qui vaut la peine d’être apprise.

C’est comme ça que je le fais.

Obtenir des contrats de service et des contrats de données

Si j’ai access au code de service, j’ai tous les contrats. Sinon, je peux utiliser svcutil ou Add Service Reference pour les générer.

Faire config

J’utilise Add Service Reference juste pour obtenir le fichier app.config. Je supprime ensuite tout ce qu’il génère. Modifiez le fichier app.config si nécessaire.

Définir l’usine

Disons que j’ai un contrat de service IFooService :

 interface IFooServiceChannel : IFooService, IClientChannel { } 

C’est littéralement ça. Aucun membre.

Créer une usine

 fooServiceFactory = new ChannelFactory( "NetTcpBinding_IFooService"); 

La chaîne “NetTcpBinding_IFooService” est l’atsortingbut name de l’élément de binding dans app.config.

Créer un canal

 fooService = fooServiceFactory.CreateChannel(); 

Utilise le

 fooService.DoSomething(); 

La partie la plus délicate est d’obtenir correctement app.config. Vous devez en savoir plus sur les liaisons et les points de terminaison . C’est un peu une courbe d’apprentissage, mais rien de radical.

Voici les étapes de base.

  1. Créez votre service comme d’habitude.
  2. Déplacez l’interface que votre service implémente dans un assembly pouvant être partagé avec le client.
  3. Créez un ChannelFactory où T est votre interface. Vous devrez donner l’URI de votre service au constructeur.
  4. Appelez factory.CreateChannel (). Ce sera le type T.
  5. Utilisez le canal pour faire des appels.

C’est vraiment aussi simple. Pas de code généré automatiquement, pas de références de service. Cela devient un peu plus compliqué avec les appels asynchrones et Silverlight, mais pas trop.