[英]SOAP Class with Collection Property
是否可以將一組項目作為肥皂引用中的屬性傳遞?
我有一個用作報告數據源的類,我希望能夠將帶有詳細項目集合的標頭Items傳遞給報告。 我已經設置了以下類和方法,該方法返回標頭詳細信息,但未將項目集合發送給客戶端。
public class PriceHeader
{
[Key]
public string Desc { get; set; }
public ObservableCollection<Item> Items { get; set; }
}
public class Item
{
[Key]
public string Field { get; set; }
public string Value1 { get; set; }
public string Value2 { get; set; }
}
[Query(IsComposable = false)]
public IEnumerable<PriceHeader> GetPriceHeaders()
{
return this.DataContext.Prices.Select(i => new PriceHeader()
{
Desc = i.Description,
Items = new System.Collections.ObjectModel.ObservableCollection<Item>(i.LinkedItems.Select(rc => new Item()
{
Field = rc.FieldName,
Value1 = rc.Value,
Value2 = rc.Value2
}))
});
}
我將Siverlight與WCF一起使用,並且報表類通過soap客戶端鏈接到WCF服務。
謝謝
我無法重現該問題,即可以從服務中將項目的集合傳遞給客戶端。 您是否絕對確定您的linq正確填充了PriceHeader對象中的Items列表? 我的猜測是,您將PriceHeader對象的集合返回給其Items屬性始終為空列表的客戶端。
這是我嘗試過的:
服務端:
[ServiceContract]
public interface IService1
{
[OperationContract]
IEnumerable<PriceHeader> GetData();
}
public class Service1 : IService1
{
public IEnumerable<PriceHeader> GetData()
{
return PriceHeader.GetPriceHeaders();
}
}
public class PriceHeader
{
public string Desc { get; set; }
public ObservableCollection<Item> Items { get; set; }
public static IEnumerable<PriceHeader> GetPriceHeaders()
{
var list = new List<PriceHeader>
{
new PriceHeader(){Desc = "Desc1", Items=new ObservableCollection<Item>{new Item(){Field = "field1", Value1 = "val11", Value2 = "val21"}}},
new PriceHeader(){Desc = "Desc2", Items=new ObservableCollection<Item>{new Item(){Field = "field2", Value1 = "val12", Value2 = "val22"}}}
};
return list;
}
}
客戶端:
private void Button_Click(object sender, RoutedEventArgs e)
{
var client = new Service1Client();
client.GetDataCompleted += client_GetDataCompleted;
client.GetDataAsync();
}
private void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
//here I inspected the results and even the Items property of PriceHeader objects were properly filled
var results = e.Result as IEnumerable<PriceHeader>;
//not sure if this is necessary here
(sender as Service1Client).CloseAsync();
}
有趣的是,在服務代理生成自動完成時,不需要分別用DataContract和DataMember屬性修飾PriceHeader及其屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.