WCF использует сериализованный обмен сообщениями, и все эти сообщения должны иметь возможность сериализации с использованием DataContractSerializer или XmlSerializer.И эти сообщения, передаваемые между клиентом и сервером, должны быть выражены в XML-схеме.
Теперь XML-схема ничего не знает об интерфейсах - все дело в конкретных, реальных типах.Для обычного сценария, когда вашими клиентами могут быть что угодно, от .NET до PHP, от Ruby до (что угодно), вы должны обязательно выразить все, что вы хотите отправить между клиентом и сервером, таким образом, который может быть представлен в XML-схемах - интерфейсахне могу.Так что на самом деле нет никакого способа поддержать это в сценарии общего назначения.
Если вы управляете обоими концами провода, например пишете и клиент, и сервер, и оба в .NET, тогда вы можетевыполните следующее:
поместите ваши DataContracts (и ваши ServiceContracts и OperationContracts и FaultContracts) в отдельную MyServiceContracts
сборку
, ссылающуюся на эту сборкукак из кода службы, так и из клиента.В этом случае, когда вы собираетесь создать клиентский прокси, упомянутые вами типы уже присутствуют, и WCF с радостью повторно использует эти типы из этой сборки.А поскольку это сборка .NET, на которую вы ссылаетесь, у вас может быть все, что поддерживает .NET, включая интерфейсы.