В моем приложении есть 2 «сервиса», скажем, один из них — базовый (целочисленный) калькулятор, а другой — калькулятор с плавающей запятой. Я выражаю их как интерфейсы следующим образом:
public interface IBasicCalculator
{
int Add( int a, int b );
}
public interface IFloatingPointCalculator
{
double Add( double a, double b );
}
Я хочу выставить их через WCF. К сожалению, WCF, похоже, очень тесно связан с представлением о том, что каждая возможная операция, которую вы хотите раскрыть, должна проходить через один единственный интерфейс службы — вы не можете совместно использовать сеансы между службами, это громоздко со стороны клиента, поскольку вам нужно создать отдельный прокси для каждого, вроде бы нет никаких "подсервисов" и т.д...
Итак, я понял, что мне нужно представить «комбинированный» интерфейс (можно также назвать его фасадом), например:
[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 );
}
Если я это сделаю, то WCF предоставляет оба метода клиенту, который может их вызывать, и все это действительно работает.
Однако подобное «наследование интерфейсов» кажется неуклюжим. Особенно new
int Add
и new
double Add
. Строго говоря, new
в методе указывает на скрытие базового метода, чего я на самом деле вообще не делаю. Я могу опустить new
, но тогда я просто получаю предупреждения компилятора, которые сводятся к «Я думаю, что скрываю этот метод, вам нужно переименовать его в метод или добавить к нему «новый».
Итак, это вопрос из 2 частей:
Я на правильном пути с моей логикой «объединить все в один интерфейс», или на самом деле есть способ предоставить «подсервисы» или «несколько связанных сервисов» с помощью WCF?
Если это то, что нужно сделать, есть ли лучший способ?
Спасибо!