Tengo un servicio WCF donde intento devolver una Lista (donde IWatchable es una interfaz personalizada que he creado) en uno de mis contratos de operación. Cuando pruebo el servicio en el cliente, el método devuelve un object[]
en lugar de List<IWatchable>
. ¿Es posible devolver una Lista de IWatchable, ya que IWatchable es una interfaz con WCF?¿Cómo puedo pasar una lista <Interface> sobre WCF?
Método:
public List<IWatchable> GetWorkload(Guid nodeId, int maximum)
IWatchable:
public interface IWatchable
{
string ActionName { get; set; }
Guid ActionReference { get; set; }
}
de esperar un poco más de información será útil ...
Tengo una interfaz derivada:
public interface IAMRAWatchable: IWatchable
Y tres concretos implementaciones del te de IAMRAWatchable
:
public class InstrumentationWatch: IAMRAWatchable
public class OutputWatch: IAMRAWatchable
etc...
En mi método de WCF que devuelve List<IWatchable>
Quiero enviar un InstrumentationWatch
y un OutputWatch
al cliente ... ¿Es esto posible o voy de este por el camino equivocado?
Resuelta
Gracias a John que encontré mi solución. KnownType
no funcionaba desde que estaba usando List<IWatchable>
- Así que envolví mi lista en una nueva clase y agregué los atributos a la misma. Voy a tener que volver a factor de mi código, pero para otros que están interesados aquí es la clase:
[DataContract]
[KnownType(typeof(InstrumentationWatch))]
[KnownType(typeof(OutputWatch))]
public class WorkInfo
{
[DataMember]
public List<IWatchable> WorkQueue { get; set; }
}
y mi método de WCF:
public WorkInfo GetWorkload(Guid nodeId, int maximum)
¿Cómo se creó su cliente (desde cero/svcutil/Agregar referencia de servicio)? –
Intenté ambos con el mismo resultado – DennyFerra
¿Qué le parece mostrarnos cómo implementó el atributo KnownTypes? –