с конвенций.

у знать, как настроить известные типы в WCF. Например, у меня естьЧеловек класс иРаботник класс.Работник класс является подклассомЧеловек класс. Оба класса отмечены[DataContract] приписывать.

Я не хочу жестко задавать известный тип класса, например[ServiceKnownType(typeof(Employee))] в классе Person, чтобы WCF знал, что Employee является подклассом Person.

Теперь я добавил в файл App.config хоста следующую конфигурацию XML:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
        <add type="Person, WCFWithNoLibrary, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null">
          <knownType type="Employee, WCFWithNoLibrary, Version=1.0.0.0,Culture=neutral, PublicKeyToken=null" />
        </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>
  <system.serviceModel>
    ....... 
  </system.serviceModel>
</configuration>

Я скомпилировал его, запустил хост, добавил ссылку на службу на клиенте, добавил код и запустил клиент. Но произошла ошибка:

Средство форматирования выдало исключение при попытке десериализации сообщения: произошла ошибка при попытке десериализации параметраhttp://www.herbertsabanal.net:person, Сообщение InnerException было «Ошибка в строке 1 позиции 247. Элемент'http://www.herbertsabanal.net:person' содержит данные'http://www.herbertsabanal.net/Data:Employee' данные договора. Десериализатор не знает ни одного типа, который соответствует этому контракту. Добавьте тип, соответствующий «Сотруднику», в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив его в список известных типов, переданных в DataContractSerializer. '. Пожалуйста, смотрите InnerException для более подробной информации.

Ниже приведены данные контрактов:

[DataContract(Namespace="http://www.herbertsabanal.net/Data", Name="Person")]
    class Person
    {
        string _name;
        int _age;

        [DataMember(Name="Name", Order=0)]
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        [DataMember(Name="Age", Order=1)]
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
    }


[DataContract(Namespace="http://www.herbertsabanal.net/Data", Name="Employee")]
    class Employee : Person
    {
        string _id;

        [DataMember]
        public string ID
        {
            get { return _id; }
            set { _id = value; }
        }
    }

Кстати, я не использовал библиотеки классов (библиотеки классов WCF или библиотеки классов не из WCF) для своей службы. Я просто закодировал это в принимающем проекте.

Я предполагаю, что должна быть проблема в файле конфигурации (см. Файл конфигурации выше). Или я должен что-то упустить. Любая помощь будет в значительной степени оценена.

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

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