Возвращение DataTables в WCF / .NET

У меня есть служба WCF, из которой я хочу вернуть DataTable. Я знаю, что это часто обсуждаемая тема, поскольку хорошая практика - возвращать ли DataTables. Давайте отложим это на мгновение.

Когда я создаю DataTable с нуля, как показано ниже, никаких проблем не возникает. Таблица создана, заполнена и возвращена клиенту, и все хорошо:

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    for(int i=0;i<100;i++)
    {
        tbl.Columns.Add(i);
        tbl.Rows.Add(new string[]{"testValue"});
    }
    return tbl;
}

Однако, как только я выхожу из базы данных и создаю таблицу, как показано ниже, я получаю сообщение CommunicationException "Базовое соединение было закрыто: соединение было неожиданно закрыто".

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    //Populate table with SQL query

    return tbl;
}

Таблица заполняется правильно на стороне сервера. Он значительно меньше тестовой таблицы, которую я перебрал и возвратил, а запрос небольшой и быстрый - здесь нет проблем с таймаутами или большой передачей данных. Точно такие же функции и DataContracts / ServiceContracts / BehaviorContracts используются.

Почему способ, которым таблица заполняется, имеет какое-либо отношение к таблице, возвращающейся успешно?

Ответы на вопрос(8)

Ваш ответ на вопрос