2010-09-19 1 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, мне интересно, если я могу, возможно, вернуться IQueryable из моей службы WCF?

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

приведенный выше пример дает мне ошибку, он не может открыть службу, – Troj

+1

, что, скорее всего, не имеет ничего общего с вашим сервисом - как вы пытаетесь прочитать данные? Как вы получаете доступ к вашему сервису? Покажите нам свои конфиги! (все внутри представляет интерес) –

+0

И какая ошибка вы получаете –

ответ

3

Невозможно вернуть список из WCF, так как это специфичный тип .NET. WCF предназначен для потребления любым клиентом, а не только для клиентов .NET. Чтобы получить список на клиенте, вы должны взять массив, который встречает провод и создать список в вашем клиентском коде.

5

Список сериализуется так же, как массив, когда он передается как SOAP-пакет - это просто XML. Это зависит от вашего клиента, чтобы определить, что коллекция должна быть помещена в список вместо массива.

Если вы используете услугу с помощью .NET-клиента (и с помощью инструмента «Добавить служебную ссылку ...»), это очень просто. В появившемся всплывающем окне «Добавить ссылку на службу» нажмите «Дополнительно» (или если у вас уже есть ссылка на службу, щелкните его правой кнопкой мыши и выберите «Настроить ссылку на службу ...»), и вы увидите экран конфигурации для справки об обслуживании.

Здесь вы можете выбрать «Тип коллекции», где по умолчанию System.Array. Просто измените это на System.Collections.Generic.List, и все готово. Обычно я это делаю, когда добавляю ссылку на службу таким образом.