Cliente do WCF com problemas para reconhecer ServiceKnownTypes?
Como eu diria ao serviço WCF que KnownTypes usar ao transmitir dados de volta ao cliente?
Eu sei que posso usar o[ServiceKnownType]
atributo, que faz com que a chamada de serviço seja executada corretamente a partir de um servidor de teste do WCF, mas ainda falha no cliente. Estou faltando alguma coisa aqui?
[OperationContract]
[ServiceKnownType(typeof(SubClassA))]
[ServiceKnownType(typeof(SubClassB))]
BaseClassZ GetObject();
A mensagem de erro do cliente é:
{"Elemento 'http://schemas.datacontract.org/2004/07/BaseClassZ' contém dados de um tipo que é mapeado para o nome 'http://schemas.datacontract.org/2004/07/SubClassA'. O desserializador considere o uso de um DataContractResolver ou adicione o tipo correspondente a 'SubClassA' à lista de tipos conhecidos - por exemplo, usando o atributo KnownTypeAttribute ou adicionando-o à lista de tipos conhecidos passado para DataContractSerializer. "}
Serializar / desserializar o objeto no servidor WCF usando um DataContractSerializer e uma lista de KnownTypes funciona bem.
ATUALIZAR: Parece que posso fazer com que o cliente leia o objeto corretamente se adicionar atributos KnownType à classe base, mas ainda estou procurando uma maneira de contornar isso, se possível, pois a classe base é usada para muitos itens e não o faço. deseja modificar os atributos KnownType na classe base sempre que adicionar um novo item.
[DataContract]
[KnownType(typeof(SubClassA))]
[KnownType(typeof(SubClassB))]
public class BaseClassZ
{
...
}