L'avantage de cette solution est sa facilité de mise en place et l'indépendance du client par rapport au service. Le désavantage est cette duplication du code. Si vous êtes détenteur du code du service et donc de ses contrats, pourquoi ne pas directement utiliser ces contrats au lieu d'en régénérer dans votre assembly cliente ? Pour éviter cette duplication, il est possible de créer un client wcf à partir du contrat via la classe System.ServiceModel.ChannelFactory. Comment utiliser ce ChannelFactory ?
Pour voir le fonctionnement, nous allons faire une petite solution visual studio qui comprendra:
- Un assembly avec l'interface du service(Contracts)
- Un assembly avec l'implémentation du service(Services) - reférence Contracts
- Un host pour le service (SVCHost) - référence Services et Contracts
- Une console qui sera client du service (ConsoleClient) - référence Contracts
Voici le code des différents composants :
Le code du host (hello.svc)
Le code du clientComme nous pouvons le voir ici, il n'y a pas de code généré. Le client référence simplement l'assembly contenant les interfaces et WCF va nous généré un client au travers de la classe ChannelFactory.
Le gros avantage est que si vous modifier votre interface, vous pouvez directement voir les impacts. Cette solution ne fonctionne néanmoins que dans un système fermé (entièrement sous contrôle d'une seule entité). Si vos services sont ouverts, vous ne pouvez pas fournir forcément fournir votre assembly de contrats. Dans ce cas la, une service reference s'impose !
Sources :
Aucun commentaire:
Enregistrer un commentaire