Как заставить подкласс класса DataContract появляться в метаданных службы WCF? - PullRequest
4 голосов
/ 23 декабря 2010

Итак, скажем, у меня есть что-то вроде этого:

public class Service : IService
{
    public someExposedMethod (someClass param){
    //do some stuff
    }
}

[DataContract]
public class someClass{}

[DataContract]
public class someSubClass : someClass {}

someClass предоставляется и может быть создан в клиенте, но someSubClass никогда не может быть создан и по какой-то причине не представленКажется, что единственный способ показать это - изменить тип параметра на someSubClass.Это нелепо.Как мне это сделать?Мне не нужен метод, который возвращает экземпляр на основе строки или чего-то еще, я хочу, чтобы клиент и разработчик имели полное представление о том, какие классы они могут создавать.

1 Ответ

8 голосов
/ 23 декабря 2010

Вы не выставляете ни один из этих классов. Ваши клиенты никогда не создают их экземпляры (если вы не делитесь типами, это другая история).

Вы выставляете метаданные. Когда выполняется «Добавить ссылку на службу», она использует эти метаданные для создания клиентского класса, который выглядит как ваш серверный класс. Похоже, что он может сериализовать и десериализовать XML, представляющий класс на стороне сервера.

Если вы хотите, чтобы метаданные для подклассов были представлены, то вам нужно добавить атрибут [KnownType] к операции для каждого подкласса:

[DataContract]
[KnownType(typeof(someSubClass))]
public class someClass{}

См. Известные типы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...