В моем приложении есть 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
, но тогда я просто получаю предупреждения компилятора, которые равняются «Я думаю, что я скрываю этот метод, вам нужно переименовать его или добавить к нему« новый »».
Итак, это вопрос из двух частей:
Идет ли я в ногу со своей логикой «объединить все в один интерфейс», или на самом деле есть способ раскрыть «подуслуги» или «несколько связанных служб» с помощью WCF?
Если это то, что нужно сделать, есть ли лучший способ?
Спасибо!