Почему возвращаемый тип метода WCF должен быть изменен с универсальной коллекции на массив? - PullRequest
2 голосов
/ 10 июня 2009

У меня есть метод службы WCF, который я написал для типа возвращаемого значения как тип коллекции.

Но если я сгенерирую прокси-класс и получу метод от клиента, тип возвращаемого метода изменится с коллекции на массив.

Почему это происходит?

Ответы [ 4 ]

5 голосов
/ 10 июня 2009

Помните - WCF также является интероперабельной системой, например, другим вашим концом может быть клиент на PHP, Java или Ruby, который не сможет понять общий список .NET!

Вы можете указать, что хотите, чтобы общие списки были указаны двумя опциями, упомянутыми Эндрю и Джимми, - это работает, если и только если вы также используете DataContractSerializer (который является выбором по умолчанию для WCF). Однако если вашей службе и / или контракту данных по какой-либо причине необходимо использовать вместо этого XmlSerializer, тогда эти настройки не помогут - ваши списки будут снова превращены в массивы.

Так что попробуйте эти варианты, показанные, и если они у вас работают - отлично! Но имейте в виду, что есть веские причины, по которым ваш общий список может быть просто превращен в более совместимый массив объектов.

Марк

2 голосов
/ 10 июня 2009

Вам нужно указать svcutil, чтобы генерировать типы в качестве универсального типа, который вы хотите. Это можно сделать, добавив этот параметр в команду svcutil:

svcutil ..blah... /ct:System.Collections.ObjectModel.Collection`1

/ct - это сокращение от /collectionType. В этом случае я указал Collection<T>, но вы могли бы так же легко использовать System.Collections.Generic.List<T>.

1 голос
/ 10 июня 2009

Если вы генерируете прокси с помощью «Добавить ссылку на службу» в Visual Studio, есть кнопка «Дополнительно», которая вызывает диалоговое окно, которое позволяет вам указать, какой тип возвращаемого значения должен быть (включая универсальные типы).

0 голосов
/ 10 июня 2009

Если вы используете Visual Studio, вы можете просто щелкнуть правой кнопкой мыши ссылку на службу, чтобы настроить ее. После этого у вас будет возможность (в дополнительных настройках?) Сообщить своему приложению, как обрабатывать массивы как коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...