Некоторое время назад я закодировал систему сбора информации об остановках общественного транспорта. Информация о любом инциденте собирается в базе данных MSSQL. Потребители получают доступ к этим данным, вызывая веб-службу .asmx. Данные собираются из БД с использованием ADO.NET, каждая строка данных затем заполняет объект отклонения и добавляется в список. На уровне сервиса к списку применяется вызов ToArray () и он возвращается потребителю.
Пока все хорошо. Но проблема в том, что в некоторых случаях (5% или около того) мы знали, что массив каким-то образом сокращается. Вместо обычного количества 15-20 предметов, возвращается только половина или даже меньше. Остальные элементы всегда находятся в конце исходного списка. И, еще реже, пара элементов повторяется / перетасовывается в начале массива.
После некоторого тестирования на разных уровнях кажется, что свертывание происходит в конце процесса, то есть во время приведения к массиву или сериализации SOAP. Но код кажется таким невинным, да ??:
[WebMethod]
public Deviation[] GetDeviationsByTimeInterval(DateTime from, DateTime to)
{
return DeviRoutines.GetDeviationsByTimeInterval(from, to).ToArray();
}
Я не уверен на 100%, что ошибка не возникает на уровне SQL или на уровне доступа к данным, но они доказали свою работу во время тестирования. Любая помощь по этому вопросу будет очень полезна! :)