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