Когда вы получаете что-то «по проводам» через WCF, вы получаете конкретную реализацию.Имеет смысл, что интерфейсы не предоставляются, потому что они абстрактные, и вы получаете конкретные типы.
Однако есть два способа сохранить интерфейс по проводам.
Первое, как указал Брайан Уоттс, - это реализовать интерфейс на вашем клиенте.Я редко использую прокси-элементы, которые передаются непосредственно из службы WCF;вместо этого я обычно перемещаю их в другие объекты на клиенте, которые могут иметь свои собственные интерфейсы, базовые классы и т. д. Я использую WCF в качестве источника данных, а затем гидратирую данные в конкретные классы, определенные на клиенте.
Хотя некоторые люди отмечают, что это похоже на дополнительную работу, я не согласен.Я редко создаю приложение «сначала сервис».Если у меня есть виджет, с которым я буду иметь дело, я определю модель для своего виджета, даже создам тесты и могу связываться с представлениями и т. Д. Сервис - это просто интерфейс для возврата виджетов, поэтому я абстрагирован от сервиса и могу тестироватьбез этого.Когда служба становится доступной, я могу просто сопоставить тип прокси-сервера с сервера и переместить его в свой определенный виджет.
Второй способ - использовать технологию проецирования данных, такую как WCF RIA.WCF RIA будет использовать сгенерированный код для создания карты кода, определенного на сервере на клиенте.Это означает, что поведение и аннотации проецируются клиенту через код.Лично я все же заканчиваю абстрагированием и не привязываюсь напрямую к моделям WCF RIA, поэтому чаще всего использую первый вариант.