2014-12-01 4 views
-1

У меня есть служба WCF со многими функциями. Некоторые из них содержат аргументы List<string>. напримерДля некоторых функций в строке WCF [] не преобразовывается в Список <string>

[ServiceContract] 
public interface IQueriesService 
{ 

    [OperationContract] 
    DataTable ExecuteSimpleQuery(List<string> sel, List<string> fr, List<string> whereCells, List<string> types, List<string> whereOps, List<string> whereValues, List<string> logOp, int cultureLCID); 
} 

public class UniverService : IQueriesService 
{ 

    public DataTable ExecuteSimpleQuery(List<string> sel, List<string> fr, List<string> whereCells, List<string> types, List<string> whereOps, List<string> whereValues, List<string> logOp, int cultureLCID) 
    { 

     DataTable dt = new DataTable(); 
     ... 
     return dt; 
    } 
} 

simpleQ.Select = simpleQ.Select.Distinct().ToList(); 
simpleQ.From = simpleQ.From.Distinct().ToList(); 
DataTable dt = svc.ExecuteSimpleQuery(simpleQ.Select, simpleQ.From, simpleQ.WhereCell, simpleQ.Type, simpleQ.WhereOp, simpleQ.WhereValue, simpleQ.LogicOperation, Thread.CurrentThread.CurrentUICulture.LCID); 

где simpleQ.Select, С, ... имеют тип List<string>

Когда я добавляю мою ссылку на службу в другой проект, в окне Service Reference Settings меняю Collection Type от System.Array к System.Collections.Generic.List. Моя проблема в том, что указанное преобразование работает для некоторых моих функций и не для других. Я имею в виду, добавив ссылку на службу и восстановив ее. Я получаю сообщение об ошибке Невозможно преобразовать из списка в строку []. Когда я смотрю на созданные прокси-классы, я вижу, что эти функции действительно содержат в качестве аргументов строковые массивы (а не списки). Кто может мне помочь?

+0

Я бы предположил, что те, которые работают, имеют тип возврата «Список», где, как тот, который вы указали в своем вопросе, имеет тип возврата «DataTable», вы знакомы с типами возврата при использовании методов ..? Кроме того, переход через код, вероятно, даст ответ в отношении того, где ваша функциональность/логика кода разбивается – MethodMan

+0

интересное соображение, но я просмотрел свои коды и 1. 'void DeleteStudents (список ids);' this one works 2. 'void SaveXMLQuery (название строки, описание строки, bool isFavourite, List fr, List sel)' также не работает ... есть ли что-нибудь, что я должен знать о типах возврата? может быть, я пойму после этого ... –

+0

'Artak' опубликовать все обновления кода в вашем исходном вопросе также покажет код с полной подписью метода. вам нужно показать, что, как и метод вызова, также показывают, как вы объявленные или назначенные 'fr' и' sel' показать все соответствующие коды – MethodMan

ответ

0

вы должны быть в состоянии добавить метод расширения ToList() в конце рассматриваемого массива, и он должен работать. Если вам не нужны функции списка (а вместо этого нужно просто перебирать аргументы), вы можете просто ввести тип параметра как IEnumerable<string>, и оба массива и списки будут работать как входные аргументы.