2009-08-03 10 views
5

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) 
+0

¿Cómo se creó su cliente (desde cero/svcutil/Agregar referencia de servicio)? –

+0

Intenté ambos con el mismo resultado – DennyFerra

+0

¿Qué le parece mostrarnos cómo implementó el atributo KnownTypes? –

Respuesta

9

Una interfaz no se puede serializar. Es solo una descripción de comportamiento.

Puede serializar los objetos que implementan la interfaz, pero debe decirle a WCF cuáles son sus tipos. Ver Data Contract Known Types.

+0

Probé los atributos de tipo de letra, pero todavía no pude resolver mi problema. Quizás la información adicional que proporcioné ayudará a aclarar mi problema exacto. Gracias – DennyFerra

Cuestiones relacionadas