Мне нужно вызывать операции webservice с помощью стандартного wsdl, но объекты данных должны быть разными в клиенте и на сервере.Как использовать интерфейс как DataContract в WCF
Использование интерфейсов для объектов данных в общей библиотеке, создание прокси-классов для него в клиенте и на сервере.
Затем я объявляю рабочий договор с использованием интерфейса, но WCF его не распознает.
Я еще не пробовал использовать DataContractSerializerПомощь и набор известных типов, пока не удался.
Кто-нибудь может мне помочь? Я приложил полное решение с более подробной информацией.
public interface Thing
{
Guid Id {get;set;}
String name {get;set;}
Thing anotherThing {get;set;}
}
[DataContract]
public class ThingAtServer: BsonDocument, Thing // MongoDB persistence
{
[DataMember]
Guid Id {get;set;}
//...
}
[DataContract]
public class ThingAtClient: Thing, INotifyPropertyChanged // WPF bindings
{
[DataMember]
Guid Id {get;set;}
//...
}
[ServiceContract]
public interface MyService
{
[OperationContract]
Thing doSomething(Thing input);
}
Нажмите здесь делают увидеть Sample project on GitHub с TestCases
You» re, не показывающий, как определяется «Вещь» - тоже ли это «[DataContract]»? Как насчет '[BsonDocument]'? Как правило, вы должны определить ** отдельные **, elightweight (DTO-style) объекты для служб WCF - не наследуйте от таких вещей, как базовый класс MongoDB - вам не нужно и не хотите сериализовать все это состояние над вашим WCF оказание услуг.... –
Также: WCF представляет собой систему передачи сообщений на основе XML - поэтому все, что вы проходите в WCF, должно быть представлено в XML-схеме (XSD); интерфейсы ** не ** поддерживаются XSD - вам нужно использовать ** конкретные классы ** (и дженерики не поддерживаются ни ...) –