33 votes

Plusieurs interfaces à partir d'un seul service WCF?

Un service WCF unique peut-il offrir plusieurs interfaces, et si oui, comment l'exprimeriez-vous en app.config ?

Je veux dire un service offrant plusieurs interfaces sur un même point de terminaison.

55voto

blowdart Points 28735

Tout d'abord vous devez être clair sur ce qu'est un service. Voulez-vous dire un effet unique, ou de plusieurs paramètres dans le même hôte?

En supposant que vous voulez dire un seul effet, alors oui, mais avec un peu de travail. D'un point de terminaison ne peut implémenter une interface unique; ainsi ce que vous devez faire est de combiner toutes les interfaces que vous souhaitez mettre en œuvre dans une seule interface

public interface IMyInterface : IInterface1, IInterface2

et puis toutes les mettre en œuvre à l'intérieur de votre classe d'implémentation. Ce que vous ne pouvez pas faire est de disposer de plusieurs interfaces et implémentations multiples comme par magie les fusionner en un seul point de terminaison.

24voto

simpsojo Points 131

Ce qui suit se rapproche de l'objectif initial et n'implique pas une seule grande interface ...

Plusieurs points de terminaison à un seul ListenUri: http://msdn.microsoft.com/en-us/library/aa395210.aspx

5voto

cruizer Points 4821

Avec WCF, vous pouvez:

  • avoir une classe d'implémentation de service qui implémente plusieurs interfaces de service
  • avoir une classe d'implémentation de service exposée à travers plusieurs points de terminaison, par exemple un point de terminaison de service utilisant BasicHttpBinding pour une interopérabilité maximale et un autre point de terminaison utilisant NetTcpBinding pour des performances maximales (avec les clients WCF).

3voto

sipwiz Points 15291

Voici comment vous pouvez exposer la même interface sur deux points de terminaison différents dans votre App.Config si c'est ce que vous demandez.

 <service name="Service1">    
   <endpoint address="http://localhost:8001/service1.asmx" binding="basicHttpBinding" contract="IService" />
</service>
<service name="Service2">    
  <endpoint address="http://localhost:8002/service2.asmx" binding="basicHttpBinding"  contract="IService" />
</service>
 

3voto

vizmi Points 49

Si votre classe d'implémentation devient trop grande (comme la mienne), essayez d'implémenter la super-interface dans une classe partielle. Vous pouvez mettre une implémentation d'interface dans un fichier. Ce n'est qu'une convention mais pourrait être utile plus tard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X