2009-08-03 17 views
5

İşletim sözleşmelerimden birinde bir Listeyi (IWatchable'ın oluşturduğum özel bir arabirim olduğu) döndürmeye çalıştığım bir WCF hizmetim var. İstemcide hizmeti test ettiğimde, yöntem List<IWatchable> yerine object[] döndürür. IWatchable, WCF ile bir arabirim olduğundan, bir IWatchable Listesi döndürmek mümkün mü?WCF üzerinden bir Listeyi <Interface> nasıl geçirebilirim?

Yöntem:

public List<IWatchable> GetWorkload(Guid nodeId, int maximum) 

IWatchable:

public interface IWatchable 
{ 
    string ActionName { get; set; } 
    Guid ActionReference { get; set; } 
} 

Umarım türetilmiş bir arayüze sahip daha fazla bilgi yararlı olacaktır biraz ...

:

public interface IAMRAWatchable: IWatchable 

Ve üç concre IAMRAWatchable dan te uygulamaları:

List<IWatchable> Bir InstrumentationWatch ve müşteriye bir OutputWatch göndermek istediğiniz döndüren benim WCF yönteminde
public class InstrumentationWatch: IAMRAWatchable 
public class OutputWatch: IAMRAWatchable 
etc... 

... Bu mümkün mü ya da yanlış yolu bu konuda gidiyorum?


benim çözüm buldu John'a

Teşekkür Çözülmüş. KnownType, List<IWatchable> kullanıyordu çalışmadan beri çalışma değildi - Bu yüzden listemi yeni bir sınıfa geçirdim ve öznitelikleri ekledim. Benim kod-faktörüne yeniden gerekir ama burada ilgilenen başkaları için sınıftır:

[DataContract] 
[KnownType(typeof(InstrumentationWatch))] 
[KnownType(typeof(OutputWatch))] 
public class WorkInfo 
{ 
    [DataMember] 
    public List<IWatchable> WorkQueue { get; set; } 
} 

ve benim WCF yöntemi: Bir arabirim serileştirilebilir asla

public WorkInfo GetWorkload(Guid nodeId, int maximum) 
+0

İstemcinizi nasıl oluşturdunuz (scratch/svcutil/Service Reference Ekle)? –

+0

Her ikisini de aynı sonuçla denedim – DennyFerra

+0

Bize KnownTypes özniteliğini nasıl uyguladığınızı göstermeye ne dersin? –

cevap

9

. Bu sadece bir davranış tanımıdır.

Arabirimi uygulayan nesneleri serileştirebilirsiniz, ancak WCF'ye türlerinin ne olduğunu söylemelisiniz. Bkz Data Contract Known Types.

+0

KnownType özniteliklerini denedim, ancak yine de sorunumu çözemedim. Belki de verdiğim ekstra bilgiler, kesin sorunumu gidermeye yardımcı olacaktır. Teşekkürler – DennyFerra

İlgili konular