Спасибо Артему, но мой интерес заключается в том, чтобы сгенерированные типы также реализовывали интерфейс ISomeType. Я не думаю, что KnownTypes обеспечит эту функциональность.

оздании прокси WCF с использованием svcutil, возможно ли также включить интерфейсы, от которых наследуются контракты данных, например:

public class SomeType: ISometype
{
   public string Name { get; set; }
}

public interface ISometype
{
   public string Name { get; set; }
}

Когда я создаю прокси с помощью этого, тип SomeType создается на клиенте, но интерфейс не создается, и наследования тоже нет. Я попытался пометить интерфейс как DataContract, но этот атрибут не разрешен.

Можно ли сделать то, что я пытаюсь сделать?

Ответы на вопрос(2)

Решение Вопроса

и все эти сообщения должны иметь возможность сериализации с использованием DataContractSerializer или XmlSerializer. И эти сообщения, передаваемые между клиентом и сервером, должны быть выражены в XML-схеме.

Теперь XML-схема ничего не знает об интерфейсах - это все о конкретных, реальных типах. Для обычного сценария, когда вашими клиентами могут быть что угодно, от .NET до PHP, от Ruby до (что угодно), вы должны обязательно выразить все, что вы хотите отправить между клиентом и сервером, таким образом, который может быть представлен в XML-схемах - интерфейсах не можешь. Так что на самом деле нет способа поддержать это в сценарии общего назначения.

Если вы контролируете оба конца провода, например, вы пишете и клиент и сервер, и оба в .NET, тогда вы можете сделать это:

поместите ваши DataContracts (и ваши ServiceContracts и OperationContracts и FaultContracts) в отдельнуюMyServiceContracts сборка

ссылаться на эту сборку как из кода службы, так и из клиента. В этом случае, когда вы собираетесь создать клиентский прокси, упомянутые вами типы уже присутствуют, и WCF с радостью повторно использует эти типы из этой сборки. А поскольку это сборка .NET, на которую вы ссылаетесь, у вас может быть все, что поддерживает .NET, включая интерфейсы.

 ganeshran18 янв. 2011 г., 07:24
Спасибо marc_s Я попробую этот подход.
 RobD09 янв. 2014 г., 19:16
Спасибо за объяснение marc_s, я предполагаю, что Ганешран рассматривает аналогичный случай для себя. Цель состоит не в том, чтобы передать экземпляр foo, который реализует ISometype, на сервер с помощью методов службы, что я хотел бы сделать, это избежать конкретных зависимостей в потребителе службы; без необходимости реплицировать все объекты в другом слое и иметь бесконечное отображение (автоматическое или иное), сервис, который я использую, имеет сотни типов и тысячи атрибутов.

ISometype и добавьте его в сериализацию, используя атрибут KnownType:

Могу ли я заставить svcutil.exe сгенерировать контракты данных для службы WCF?

 ganeshran18 янв. 2011 г., 07:27
Спасибо Артему, но мой интерес заключается в том, чтобы сгенерированные типы также реализовывали интерфейс ISomeType. Я не думаю, что KnownTypes обеспечит эту функциональность.

Ваш ответ на вопрос