Какой тип списка / коллекции лучше всего использовать в контракте данных WCF?

StackOverflow https://stackoverflow.com/questions/594499

  •  09-09-2019
  •  | 
  •  

Вопрос

При определении контракта данных WCF, какой тип следует использовать для коллекций / списков?

  • Должно ли это быть ICollection<T>, IList<T>, T[] или ...?
  • Должен ли я использовать типы интерфейса или конкретные типы?
  • Какие компромиссы следует рассмотреть?
Это было полезно?

Решение

примечание:Я отвечаю на это из клиентский перспектива - т. е.в /collectionType:<type> включить svcutil.exe (также доступно в IDE).

Лично я стараюсь, чтобы это было просто и удобно List<T>.Если вы собираетесь выполнять большую привязку данных, BindingList<T> возможно, это вариант, но для свойств объекта это обычно излишество.Массивы очень усложняют жизнь...избегайте их ;-p

Обратите внимание, что в .NET 3.5 функции, доступные для каждого типа коллекции, размыты благодаря методам расширения на Enumerable.

Обычно, Collection<T> полезно, когда вы думаете, что, возможно, захотите создать подкласс коллекции, чтобы использовать virtual точки расширения.На самом деле это не вариант с WCF.

Как уже говорилось, используя IList<T> etc - это не вариант, если только вы не используете общий доступ к сборке, поскольку сгенерированный класс не сможет создать коллекцию.

Другие советы

Вы не можете использовать тип интерфейса в datacontract, потому что сериализатор не будет работать со свойствами типа интерфейса.

Вы можете использовать конкретный тип, напримерMyClass[] или Список

Помимо того факта, что вы не можете использовать типы интерфейса, на самом деле не имеет значения, какой из типов коллекции вы используете.Клиент вашего сервиса никогда их не увидит.

Помните, что веб-службы предоставляют клиенту descriptionj сервиса в терминах WSDL или mex.В случае WSDL клиент получит XML-схему, описывающую сообщения, которые должны быть отправлены и получены.В случае коллекции клиент просто увидит элемент с maxOccurs="неограниченный" вместо элемента с maxOccurs="1".Клиент может интерпретировать это как массив, или список, или что-то еще.Независимо от того, какую коллекцию вы вернете из своего сервиса, клиент увидит maxOccurs="неограниченный" и интерпретирует ее по своему усмотрению.

Исключением было бы возвращение какого-то словаря, и я не знаю, как это работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top