Круто, так что вы реализуете более одного контракта на обслуживание одного сервиса. Круто, так что это означает, что ваша точка отсчета никогда не касалась количества прокси-серверов, а действительно количества сервисов, и теперь вы знаете, как выполнить то, что вы описываете. Здорово.
м приложении есть 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?
Если это то, что должно быть сделано, есть ли лучший способ?
Спасибо!