Почему 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
Когда вы добавляете ссылку на службу в проект клиента, нажмите кнопку "Дополнительно" и измените тип коллекции из массива на то, что вы хотите...