簡體   English   中英

具有Collection屬性的SOAP類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM