Почему WCF возвращает myObject[] вместо List<T>, как я ожидал?
Я возвращаю список из моего метода WCF. В моем клиентском коде этот тип возврата отображается как MyObject[]. Я должен либо использовать MyObject[], либо IList, либо IEnumerable...
WCFClient myClient = new WCFClient();
MyObject[] list = myClient.GetMyStuff();
or
IList<MyObject> list = myClient.GetMyStuff();
or
IEnumerable<MyObject> list = myClient.GetMyStuff();
Все, что я делаю, это собираю эту коллекцию и привязываю ее к сетке. Каков лучший объект, чтобы назначить мою возвращенную коллекцию?
4 ответа
Вы можете указать, что вы хотите использовать общий список вместо массива, нажав на кнопку "Дополнительно" при добавлении ссылки, или вы можете щелкнуть правой кнопкой мыши ссылку на службу и выбрать "Настроить", чтобы изменить ее на месте.
Причина в том, что WCF сериализует общие списки как массивы для отправки по проводам. Конфигурация просто говорит svcutil создать прокси, который преобразует их обратно в общий список для вашего удобства.
Когда вы используете svcutil.exe
чтобы создать свой клиентский код, вы должны указать ему, как разрешить определенные ссылки, которые ему недоступны.
Вот как ты это сделаешь List<T>
:
svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex
Стивер Б правильный. WCF очень старается не быть связанным с.NET. Возможно, вы захотите разрешить клиенту Java подключаться к вашему компоненту. Массивы совместимы. Общие.NET списки не являются.
Тем не менее, вы можете создать свой собственный прокси-класс, который преобразует массив обратно в список или что-то еще, что вам нужно. Хорошая вещь о создании собственных прокси вручную заключается в том, что вы полностью контролируете то, что они делают.
Когда вы добавляете ссылку на сервис в клиентский проект, нажмите кнопку "Дополнительно" и измените тип коллекции с массива на тот, каким вы хотите, чтобы он был...