Jak przekazać listę <Interface> nad WCF?
Mam usługę WCF, w której próbuję zwrócić listę (gdzie IWatchable to niestandardowy interfejs, który zbudowałem) w jednym z moich kontraktów operacyjnych. Kiedy testuję usługę na kliencie, metoda zwracaobject[]
zamiastList<IWatchable>
. Czy jest możliwe zwrócenie listy IWatchable, ponieważ IWatchable jest interfejsem z WCF?
Metoda:
public List<IWatchable> GetWorkload( Guid nodeId, int maximum )
IWatchable:
public interface IWatchable
{
string ActionName { get; set; }
Guid ActionReference { get; set; }
}
Mam nadzieję, że trochę więcej informacji będzie pomocne ...
Mam interfejs pochodny:
public interface IAMRAWatchable: IWatchable
I trzy konkretne wdrożeniaIAMRAWatchable
:
public class InstrumentationWatch: IAMRAWatchable
public class OutputWatch: IAMRAWatchable
etc...
W mojej metodzie WCF, która zwracaList<IWatchable>
Chcę wysłaćInstrumentationWatch
i anOutputWatch
do klienta ... Czy to możliwe, czy mam to w niewłaściwy sposób?
Zdecydowany
Dzięki Johnowi znalazłem swoje rozwiązanie.KnownType
nie działał, odkąd używałemList<IWatchable>
- Więc umieściłem moją listę w nowej klasie i dodałem do niej atrybuty. Muszę zmienić współczynnik kodu, ale dla innych zainteresowanych jest klasa:
[DataContract]
[KnownType( typeof( InstrumentationWatch ) )]
[KnownType( typeof( OutputWatch ) )]
public class WorkInfo
{
[DataMember]
public List<IWatchable> WorkQueue { get; set; }
}
i moja metoda WCF:
public WorkInfo GetWorkload( Guid nodeId, int maximum )