WCF: Configurando tipos conhecidos

Quero saber como configurar tipos conhecidos no WCF. Por exemplo, eu tenho umPesso classe e umEmpregad classe. OEmpregad class é um sublass doPesso classe. Ambas as classes são marcadas com um[DataContract] attribute.

Eu não quero codificar o tipo conhecido de uma classe, como colocar um[ServiceKnownType(typeof(Employee))] na classe Person para que o WCF saiba que Employee é uma subclasse de Perso

gora, adicionei ao App.config do host a seguinte configuração 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>

Eu compilei, executei o host, adicionei uma referência de serviço ao cliente e adicionei algum código e execute o cliente. Ocorreu um erro:

O formatador lançou uma exceção ao tentar desserializar a mensagem: Ocorreu um erro ao tentar desserializar o parâmetrohttp://www.herbertsabanal.net:person. A mensagem InnerException era 'Erro na linha 1, posição 247. Elemento'http://www.herbertsabanal.net:person' contém dados do'http://www.herbertsabanal.net/Data:Employee' contrato de dados. O desserializador não tem conhecimento de nenhum tipo que seja mapeado para este contrato. Adicione o tipo correspondente a 'Employee' à lista de tipos conhecidos - por exemplo, usando o atributo KnownTypeAttribute ou adicionando-o à lista de tipos conhecidos transmitidos ao DataContractSerializer. '. Consulte InnerException para mais detalhes.

Abaixo estão os contratos de dados:

[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; }
        }
    }

Aliás, eu não usei bibliotecas de classes (bibliotecas de classes WCF ou bibliotecas de classes não-WCF) para o meu serviço. Eu simplesmente o codifiquei no projeto hos

Acho que deve haver um problema no arquivo de configuração (consulte o arquivo de configuração acima). Ou devo estar faltando alguma coisa. Qualquer ajuda seria muito bem-vinda.

questionAnswers(3)

yourAnswerToTheQuestion