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