Как вернуть IEnumerable <T>из веб-сервиса - PullRequest
5 голосов
/ 18 января 2011

Мне было интересно, почему я не могу вернуть IEnumerable<T> через веб-сервис.

В моем веб-сервисе я возвращаю IEnumerable<T>, но когда я проверяю IntelliSense в VS 2010, я вижу, что он дает мнеa T[].

Может ли кто-нибудь дать мне объяснение этому поведению?

Ответы [ 2 ]

8 голосов
/ 18 января 2011

С MSDN :

Могу ли я использовать универсальные шаблоны в веб-службах?

К сожалению, нет.Веб-сервисы должны предоставлять контракт на основе WSDL.Такие контракты всегда ограничены выразительностью используемого формата сообщения.Например, веб-службы на основе HTTP-GET поддерживают только примитивные типы, такие как int или string, но не сложные типы, такие как DataSet.Веб-службы на основе SOAP более функциональны, но у SOAP нет возможности представлять параметры универсального типа.В результате в настоящее время вы не можете определить веб-сервисы, которые полагаются на универсальные типы.Тем не менее, вы можете определить .NET веб-сервисы, которые используют закрытые сконструированные универсальные типы, например:

public class MyWebService 
{
   [WebMethod]
   public List<string> GetCities() 
   {
      List<string> cities = new List<string>();
      cities.Add("New York");
      cities.Add("San Francisco");
      cities.Add("London");
      return cities;
   }
}

В приведенном выше примере List будет маршалироваться как массив строк.

0 голосов
/ 18 января 2011

Массив T[] поддерживает IEnumerable<T>

Вы возвращаются IEnumerable<T>

    public IEnumerable<T> Something()
    {
        return new T[] {};
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...