2010-09-19 95 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即可。我通常这样做,只要我以这种方式添加服务引用。