Ho un servizio WCF in cui sto cercando di restituire un elenco (in cui IWatchchable è un'interfaccia personalizzata che ho creato) in uno dei miei contratti operativi. Quando eseguo il test del servizio sul client, il metodo restituisce un valore object[]
anziché List<IWatchable>
. È possibile restituire una lista di IWatchable, dato che IWatchable è un'interfaccia con WCF?Come posso passare una lista <Interface> su WCF?
Metodo:
public List<IWatchable> GetWorkload(Guid nodeId, int maximum)
IWatchable:
public interface IWatchable
{
string ActionName { get; set; }
Guid ActionReference { get; set; }
}
Speriamo che un po 'più di informazioni sarà utile ...
Ho un'interfaccia derivata:
public interface IAMRAWatchable: IWatchable
E tre concre te le implementazioni da IAMRAWatchable
:
public class InstrumentationWatch: IAMRAWatchable
public class OutputWatch: IAMRAWatchable
etc...
Nel mio metodo WCF che restituisce List<IWatchable>
Voglio inviare una InstrumentationWatch
ed un OutputWatch
al cliente ... Questo è possibile o sto andando su questo nel modo sbagliato?
risolto
Grazie a John che ho trovato la mia soluzione. KnownType
non funzionava da quando stavo usando List<IWatchable>
- Così ho avvolto la mia lista in una nuova classe e ho aggiunto gli attributi ad essa. Avrò bisogno di ri-factor il mio codice ma per gli altri che sono interessati qui è la classe:
[DataContract]
[KnownType(typeof(InstrumentationWatch))]
[KnownType(typeof(OutputWatch))]
public class WorkInfo
{
[DataMember]
public List<IWatchable> WorkQueue { get; set; }
}
e il mio metodo WCF:
public WorkInfo GetWorkload(Guid nodeId, int maximum)
Come è stato creato il client (da zero/svcutil/Aggiungi riferimento servizio)? –
Ho provato entrambi con lo stesso risultato – DennyFerra
Che ne dici di mostrarci come hai implementato l'attributo KnownTypes? –