Возвращение 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 используются.
Почему способ, которым таблица заполняется, имеет какое-либо отношение к таблице, возвращающейся успешно?