Когда вы добавляете ссылку на службу в VS 2010 для службы, она генерирует интерфейс с именем IMyService, который содержит методы для каждого OperationContract в вашей службе. Он также генерирует конкретный класс с именем MyServiceClient, который можно создать, а затем использовать для вызова вашего сервиса.
Теперь проблема, с которой вы сталкиваетесь, я полагаю, состоит в том, что MyServiceClient является подклассом ClientBase<IMyService>
и не реализует сгенерированный интерфейс IMyService (что является реальной проблемой).
Чтобы обойти эту проблему, я создал новый интерфейс:
public interface IMyServiceClient : IMyService, IDisposable, ICommunicationObject
{
}
(Примечание: IDisposable и ICommunicationObject требуются только в том случае, если вы хотите, чтобы ваш модуль мог обнаруживать / реагировать на неисправные каналы и другие подобные вещи).
Затем я расширяю MyServiceClient частичным классом (в сборке, содержащей мою ссылку на службу WCF):
public partial class MyServiceClient : IMyServiceClient
{
}
Теперь в своих модулях я могу принять IMyServiceClient вместо IMyService и по-прежнему выполнять все необходимые мне методы. Приложение, управляющее модулями, по-прежнему может создавать экземпляры MyServiceClient, как и всегда.
Прелесть этого в том, что вашему новому интерфейсу и частичному классу не нужен какой-либо реальный код - достаточно определений, чтобы выполнить работу.