Herança WCF e interface - isso é uma coisa terrível a se fazer?
Meu aplicativo possui 2 "serviços", digamos que um seja uma calculadora básica (inteira) e um seja uma calculadora de ponto flutuante. Eu os expresso como interfaces assim:
public interface IBasicCalculator
{
int Add( int a, int b );
}
public interface IFloatingPointCalculator
{
double Add( double a, double b );
}
Eu quero expô-los via WCF. Infelizmente, o WCF parece estar intimamente ligado à noção de que toda operação possível que você deseja expor deve passar por uma única interface de serviço - você não pode compartilhar sessões entre serviços; isso é complicado do lado do cliente, pois você precisa criar um proxy separado para cada um, não parece haver nenhum "sub-serviço", etc ...
Então, concluí que preciso apresentar uma interface "combinada" (pode-se chamar também de fachada), assim:
[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 );
}
Se eu fizer isso, o WCF expõe os dois métodos ao cliente, que pode chamá-los, e tudo realmente funciona.
No entanto, "herdar as interfaces" assim parece desagradável.Particularmente anew
int Add
enew
double Add
. Estritamente falando,new
em um método indica ocultar um método subjacente, o que realmente não estou fazendo. Eu posso omitir onew
, mas recebo apenas avisos do compilador que equivalem a "Acho que estou ocultando esse método, você precisa renomeá-lo ou colocar 'novo' nele".
Portanto, esta é uma pergunta em duas partes:
Estou no caminho certo com minha lógica 'combinar tudo em uma interface' ou existe realmente uma maneira de expor "sub-serviços" ou "vários serviços vinculados" usando o WCF?
Se é isso que precisa ser feito, existe uma maneira melhor?
Obrigado!