Клиент WCF испытывает проблемы с распознаванием ServiceKnownTypes?
Как мне сообщить службе WCF, какие KnownTypes использовать при передаче данных клиенту?
Я знаю, что могу использовать[ServiceKnownType]
атрибут, который заставляет вызов службы работать нормально с тестового сервера WCF, однако он все равно не выполняется с клиента. Я что-то здесь упускаю?
[OperationContract]
[ServiceKnownType(typeof(SubClassA))]
[ServiceKnownType(typeof(SubClassB))]
BaseClassZ GetObject();
Сообщение об ошибке от клиента:
{"Элемент" http://schemas.datacontract.org/2004/07/BaseClassZ "содержит данные из типа, который отображается на имя" http://schemas.datacontract.org/2004/07/SubClassA ". Десериализатор не знает ни одного типа, который сопоставляется с этим именем. Попробуйте использовать DataContractResolver или добавить тип, соответствующий SubClassA, в список известных типов, например, используя атрибут KnownTypeAttribute или добавив его в список известных типов. передано в DataContractSerializer. "}
Сериализация / десериализация объекта на сервере WCF с использованием DataContractSerializer и списка KnownTypes работает нормально.
ОБНОВИТЬ: Похоже, я могу заставить клиента правильно прочитать объект, если я добавлю атрибуты KnownType в базовый класс, но я все еще ищу способ обойти это, если это возможно, так как базовый класс используется для большого количества элементов, и я не Я хочу изменить атрибуты KnownType базового класса каждый раз, когда добавляю новый элемент.
[DataContract]
[KnownType(typeof(SubClassA))]
[KnownType(typeof(SubClassB))]
public class BaseClassZ
{
...
}