J'ai un service WCF où j'essaye de retourner une liste (où IWatchable est une interface faite sur commande que j'ai construite) dans un de mes contrats d'opération. Lorsque je teste le service sur le client, la méthode renvoie un object[]
au lieu de List<IWatchable>
. Est-il possible de retourner une liste d'IWatchable, puisque IWatchable est une interface avec WCF?Comment puis-je passer une liste <Interface> sur WCF?
Méthode:
public List<IWatchable> GetWorkload(Guid nodeId, int maximum)
IWatchable:
public interface IWatchable
{
string ActionName { get; set; }
Guid ActionReference { get; set; }
}
Il faut espérer un peu plus d'informations sera utile ...
J'ai une interface dérivée:
public interface IAMRAWatchable: IWatchable
Et trois concre implémentations te de IAMRAWatchable
:
public class InstrumentationWatch: IAMRAWatchable
public class OutputWatch: IAMRAWatchable
etc...
Dans ma méthode WCF qui retourne List<IWatchable>
Je veux envoyer un InstrumentationWatch
et un OutputWatch
au client ... Est-ce possible ou que je vais sur ce dans le mauvais sens?
Résolue
Merci à John que j'ai trouvé ma solution. KnownType
ne fonctionnait pas depuis que j'utilisais List<IWatchable>
- J'ai donc enveloppé ma liste dans une nouvelle classe et lui ai ajouté les attributs. Je vais avoir besoin de re-facteur mon code, mais pour d'autres qui sont intéressés ici est la classe:
[DataContract]
[KnownType(typeof(InstrumentationWatch))]
[KnownType(typeof(OutputWatch))]
public class WorkInfo
{
[DataMember]
public List<IWatchable> WorkQueue { get; set; }
}
et ma méthode WCF:
public WorkInfo GetWorkload(Guid nodeId, int maximum)
Comment avez-vous créé votre client (à partir de zéro/svcutil/Add Service Reference)? –
J'ai essayé les deux avec le même résultat – DennyFerra
Que diriez-vous de nous montrer comment vous avez implémenté l'attribut KnownTypes? –