Ваш код, как написано, генерирует предупреждение, потому что метод IGetData
DoWork()
скрывает метод IServiceA
DoWork
.
Чтобы избавиться от предупреждения, нужно добавить новое ключевое слово:
[ServiceContract]
public interface IGetData : IServiceA
{
// Implements IServiceA method
[OperationContract]
new string DoWorkA();
}
Но я думаю, что вы хотите объединить меньшие интерфейсы в один более крупный сервис. Тогда ваши модули могут взаимодействовать с их понятным интерфейсом (который является подмножеством интерфейса службы).
Например:
public interface IWarehouse : IShipping, IReceiving, IInventory, IMovement {}
Мы реализовали нечто подобное.
- Мы определили все наши сервисные контракты в общей сборке и использовали интерфейсы как на клиенте, так и на сервере.
- Мы создали клиентские прокси, которые реализовали эти интерфейсы.
После этого клиенты могут взаимодействовать с клиентскими прокси с более простым подмножеством всего интерфейса службы.
Сначала определите интерфейсы:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
string DoWorkA();
}
[ServiceContract]
public interface IServiceB
{
[OperationContract]
string DoWorkB();
}
[ServiceContract]
public interface IGetData : IServiceA, IServiceB
{
}
Затем создайте прокси (вы также можете использовать ChannelFactory
здесь):
public class ServiceClientA : ClientBase<IGetData>, IServiceA
{
public string DoWorkA()
{
return Channel.DoWorkA();
}
}
public class ServiceClientB : ClientBase<IGetData>, IServiceB
{
public string DoWorkB()
{
return Channel.DoWorkB();
}
}
Вышеуказанное было бы аналогично вашему MyClass.
Тогда клиент может использовать индивидуальный интерфейс:
IServiceA clientA = new ServiceClientA();
string result = clientA.DoWorkA();
IServiceB clientB = new ServiceClientB();
result = clientB.DoWorkB();
Вы также можете создать сервисную фабрику здесь, если хотите.
Надеюсь, это даст вам некоторые идеи.