Почему WCF возвращает myObject [] вместо List <T>, как я ожидал?

Я возвращаю List из моего метода 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();

Все, что я делаю, это сбор этой коллекции и привязка ее к сетке. Каков наилучший объект для назначения моей возвращенной коллекции?

Ответ 1

Можно указать, что вы хотите использовать общий список вместо массива, нажав кнопку "Дополнительно", когда вы добавляете ссылку, или вы можете щелкнуть правой кнопкой мыши ссылку на службу и выбрать "configure", чтобы изменить ее на месте.

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

Ответ 2

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

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

svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex

Ответ 3

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

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

Ответ 4

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