Почему WCF возвращает myObject [] вместо List <T>, как я ожидал? - PullRequest
63 голосов
/ 29 января 2009

Я возвращаю список из моего метода 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 ]

83 голосов
/ 30 января 2009

Вы можете указать, что хотите использовать общий список вместо массива, щелкнув расширенную кнопку при добавлении ссылки, или вы можете щелкнуть правой кнопкой мыши ссылку на службу и выбрать команду «Изменить» для ее изменения.

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

13 голосов
/ 30 января 2009

Когда вы используете svcutil.exe для создания своего клиентского кода, вы должны указать ему, как разрешить определенные ссылки, которые ему недоступны.

Вот как вы бы это сделали для List<T>:

svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex
8 голосов
/ 30 января 2009

Stever B является верным. WCF очень старается не быть связанным с .NET. Вы можете разрешить клиенту Java подключаться к вашему компоненту. Массивы совместимы. Общие .NET списки не являются.

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

2 голосов
/ 29 января 2009

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

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