2010-09-19 71 views
1

如何從WCF服務返回某種列表,這是我WCF服務中的方法。wcf從wcf sservice返回一個列表

我的界面:

[OperationContract] 
[WebInvoke(Method = "GET", 
ResponseFormat = WebMessageFormat.Json, 
BodyStyle = WebMessageBodyStyle.Wrapped, 
UriTemplate = "Locations")] 
IList<Location> GetLocations(); 

public IList<Location> GetLocations() 
{ 
    Pazar.Data.Repositories.LocationRepository locRepository = 
     new Pazar.Data.Repositories.LocationRepository(); 
    return locRepository.GetRootLocations().ToList<Location>(); 
} 

,這我GetRootLocations看起來像,它返回IQueryable,我不知道如果我也許可以從我的WCF服務回報IQueryable

public IQueryable<Location> GetRootLocations() 
{ 
    IQueryable<Location> locations = GetAll().Where(p => !p.ID_Parent.HasValue).OrderBy(p => p.Sequence); 
    return locations; 
} 
+0

上面的例子給我錯誤,它不能打開服務, – Troj 2010-09-19 20:48:38

+1

,最有可能與您的服務無關 - 你怎麼試圖讀取數據?你如何訪問你的服務?向我們展示您的配置! (內的所有內容都是有趣的) – 2010-09-19 20:51:06

+0

你還得到什麼錯誤 – 2010-09-20 06:00:18

回答

3

無法從WCF返回列表,因爲這是.NET特定類型。 WCF旨在被任何客戶端使用,而不僅僅是.NET客戶端。要在客戶端上獲得一個List,你必須獲取通過連線的數組,並在你的客戶端代碼中創建一個List。

5

當一個List作爲一個SOAP包傳輸時,它的序列化方式與Array相同 - 它只是XML。這取決於你的客戶確定集合應該放入List而不是Array中。

如果您使用.NET客戶端(並使用「添加服務引用...」工具)來使用該服務,這非常簡單。在添加服務引用彈出窗口中單擊「高級」(或者如果您已經有服務引用,右鍵單擊它並選擇「配置服務引用...」),您將看到服務引用的配置屏幕。

這裏有一個下拉列表,允許您選擇「收集類型」,其中默認爲System.Array。只需將其更改爲System.Collections.Generic.List即可。我通常這樣做,只要我以這種方式添加服務引用。