Pergunta

Eu tenho um serviço WCF e estou compartilhando tipos com um cliente em uma montagem compartilhada. Se o cliente criar uma classe derivada, será possível repassar o tipo derivado para o serviço para que eu possa ler as propriedades adicionadas através da reflexão?

Eu tentei, mas tendo problemas com os types conhecidos, pois o serviço não sabe como desfazer o tipo derivado.

[Serializable]
public abstract class Car : ICar
{........

// no cliente:

[Serializable]
public class MyCar : Car
{......

Ao passar do MyCar para o serviço, recebo a exceção reclamando do KnowType, mas não posso adicionar isso ao servidor, pois não sei o que o cliente enviará e quero lidar com propriedades extras através da reflexão.

Possível registrar tipos de clientes como types conhecidos em tempo de execução?
Talvez seja a solução?http://blogs.msdn.com/b/sowmy/archive/2006/03/26/561188.aspx

Foi útil?

Solução

Isso não é possível. Tanto o serviço quanto o cliente precisam saber quais tipos serão enviados em mensagens. Se você deseja usar o tipo conhecido, deve definir essa relação com o tipo pai no serviço.

Por que você precisa conhecer propriedades adicionais no servidor?

Outras dicas

Eu acho que existe um caminho.

Lembro -me vagamente que, quando estudei o WCF, conheci o ExtensionData, que deveria ser um mecanismo para obter tudo o que não corresponde à serialização da classe. por exemplo, se você ativar a extensão e está nesta situação

//Server
public class GenericRQ
{
    public string GenericProperty {get;set;}
}


public Service GenericService
{
    Public void GenericMethod(GenericRQ RQ)
    {
    }

}

// client

Public class MoreSpecificRQ : GenericRQ
{
    public string SpecificProperty {get;set;}
}

No

Public void GenericMethod(GenericRQ RQ)
    {
    // the serializer adds automatically in RQ.ExtensionData everything that has come and that does not match the class GenericRQ.

    }

Sobre como ativar a extensão que você procura facilmente na web

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top