Почему мы не можем вернуть список <T>в веб-сервисах ASMX? - PullRequest
4 голосов
/ 22 ноября 2010

Поскольку разработчики знают, что мы не можем вернуть List<T> с веб-службами, мы можем возвращать списки только с преобразованием их в .ToArray ();Я искал некоторые, но не могу получить эффективный ответ о том, Почему мы не можем перенастроить список с помощью веб-сервисов.Почему мы должны конвертировать их ToArray ();

Ответы [ 5 ]

9 голосов
/ 22 ноября 2010

Веб-сервисы должны взаимодействовать со многими языками.Почти все языки имеют массивы, но только .NET имеет конкретную реализацию List<T>, которую вы используете.

5 голосов
/ 22 ноября 2010

Ничто не мешает вам вернуть List<T> из веб-службы ASMX.Я понятия не имею, почему вы в это верите.

Что может вас смущать, так это то, что XML-схема (используемая WSDL) сама по себе не может описывать «списки».Фактически, он также не может описывать массивы.Он может описать серию повторяющихся элементов.Все коллекции, включая массивы, возвращаются как наборы повторяющихся элементов.

На стороне клиента клиент не может узнать, возвратил ли сервер List<T>, T[] или IEnumerable<T>, инет причин для беспокойства.

2 голосов
/ 22 ноября 2010

Это зависит от настроек взаимодействия веб-службы, такой объект, как int[], легче понять для языка, отличного от .NET, чем List<int>. Если вы разрабатываете свой веб-сервис под WCF , List<T> поддерживается в качестве типа возврата.

1 голос
/ 22 ноября 2010

То, что описано в веб-сервисах, является «коллекцией». Клиент сам должен определить, какой тип «коллекции» использовать. Если при добавлении ссылки на службу в .Net клиента нажмите «Дополнительно», у вас будет возможность выбрать общий список.

0 голосов
/ 14 января 2014

Насколько мне известно, пока вы явно заявляете, что возвращаете заголовок метода List (of T), вы можете вернуть объект;в противном случае вы получите ошибку сериализации.

например

<WebMethod()> _
Public Function Search(ByVal SearchTerm As String) As List(Of 'object here')
...