Como posso passar uma List <Interface> pelo WCF?
Eu tenho um serviço WCF onde estou tentando retornar uma lista (onde IWatchable é uma interface personalizada que eu construí) em um dos meus contratos de operação. Quando eu testo o serviço no cliente, o método retorna umobject[]
ao invés deList<IWatchable>
. É possível retornar uma lista de IWatchable, uma vez que IWatchable é uma interface com o WCF?
Método:
public List<IWatchable> GetWorkload( Guid nodeId, int maximum )
IWatchable:
public interface IWatchable
{
string ActionName { get; set; }
Guid ActionReference { get; set; }
}
Espero que um pouco mais de informação seja útil ...
Eu tenho uma interface derivada:
public interface IAMRAWatchable: IWatchable
E três implementações concretas deIAMRAWatchable
:
public class InstrumentationWatch: IAMRAWatchable
public class OutputWatch: IAMRAWatchable
etc...
No meu método WCF que retornaList<IWatchable>
Eu quero mandar umInstrumentationWatch
e umOutputWatch
para o cliente ... Isso é possível ou eu estou indo sobre isso da maneira errada?
Resolvido
Graças a John eu encontrei a minha solução.KnownType
não estava funcionando desde que eu estava usandoList<IWatchable>
- Então, agrupei minha lista em uma nova classe e adicionei os atributos a ela. Eu precisarei refatorar meu código, mas para outros que estão interessados aqui está a classe:
[DataContract]
[KnownType( typeof( InstrumentationWatch ) )]
[KnownType( typeof( OutputWatch ) )]
public class WorkInfo
{
[DataMember]
public List<IWatchable> WorkQueue { get; set; }
}
e meu método WCF:
public WorkInfo GetWorkload( Guid nodeId, int maximum )