Mon application comporte 2 "services", disons que l'un est une calculatrice de base (entiers) et l'autre une calculatrice à virgule flottante. Je les exprime sous forme d'interfaces comme suit :
public interface IBasicCalculator
{
int Add( int a, int b );
}
public interface IFloatingPointCalculator
{
double Add( double a, double b );
}
Je veux les exposer via WCF. Malheureusement, WCF semble être très étroitement lié à la notion que chaque opération possible que vous voulez exposer doit passer par une seule interface de service - vous ne pouvez pas partager des sessions entre les services, c'est encombrant du côté client car vous devez créer un proxy distinct pour chacun d'eux, il ne semble pas y avoir de "sous-services", etc...
J'ai donc compris que je devais présenter une interface "combinée" (on pourrait aussi l'appeler une façade), comme ceci :
[ServiceContract]
public interface ICalculatorService : IBasicCalculator, IFloatingPointCalculator
{
[OperationContract(Name = "AddInt")]
new int Add( int a, int b );
[OperationContract(Name = "AddDouble")]
new double Add( double a, double b );
}
Si je fais ceci, alors WCF expose les deux méthodes au client, qui peut les appeler, et tout fonctionne réellement.
Cependant, "hériter des interfaces" de cette manière semble peu pratique. En particulier le site new
int Add
y new
double Add
. A proprement parler, new
sur une méthode indique qu'il faut cacher une méthode sous-jacente, ce que je ne fais pas du tout. Je peux omettre le new
mais ensuite je reçois des avertissements du compilateur qui se résument à "Je pense que je cache cette méthode, tu dois la renommer méthode ou mettre 'new' dessus".
Il s'agit donc d'une question en deux parties :
-
Suis-je sur la bonne voie avec ma logique de "tout combiner en une seule interface", ou existe-t-il réellement un moyen d'exposer des "sous-services" ou des "services multiples liés" en utilisant WCF ?
-
Si c'est ce qu'il faut faire, y a-t-il un meilleur moyen ?
Merci !