İş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)
İstemcinizi nasıl oluşturdunuz (scratch/svcutil/Service Reference Ekle)? –
Her ikisini de aynı sonuçla denedim – DennyFerra
Bize KnownTypes özniteliğini nasıl uyguladığınızı göstermeye ne dersin? –