Я разработал систему на основе C # AJAX с модулем создания отчетов, из-за более сложных отчетов, занимающих около 30 секунд, я встроил параллельный вызов AJAX, чтобы сообщить о ходе создания отчета.
Генератор отчетов
В начале отчета я создаю элемент в кеше
HttpContext.Current.Cache.Insert(appProgressName, new JSON.ReportProgress(), null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration );
, который затем периодически обновляется в процессе генерации отчета
((JSON.ReportProgress)HttpContext.Current.Cache[appProgressName]).TimesheetsProcessed++;
затем, наконец, когда генерация отчета завершена, он удаляется из кэша
HttpContext.Current.Cache.Remove(appProgressName);
Проверка выполнения отчета
Затем выполняется вызов AJAX, который выполняется каждые несколькосекунд в браузере, который вызывает следующий веб-метод на сервере.
[WebMethod]
public static JSON.ReportProgress ReportProgress()
{
string appProgressName = User.CurrentId() + "_ReportProgress";
if ( HttpContext.Current.Cache[appProgressName] != null )
{
return (eServices.SIBSv2.JSON.ReportProgress)HttpContext.Current.Cache[appProgressName];
}
return null;
}
Это позволяет клиенту рассчитать, как далеко проходит генерация отчета, и отобразить обновление индикатора выполнения.
Изображение ниже из Firebug показывает, что оно работает правильно - с первоначальным запросом генерации отчета и проверками хода выполнения после него.
Этот код работает нормально до Visual Studio 2010 , сначала используя веб-браузер разработки, но перестает работать после примерно пяти запросов отчета.При развертывании в рабочей среде (с использованием Windows 2003, IIS6, .net 4.0) отображается то же поведение, показывающее ход создания отчета за первые несколько попыток, а затем не работающий для дальнейших запросов.
Проверка вызовов AJAX с использованием Firebug, когда эта проблема начинает возникать. Я вижу, что вызов AJAX, выполненный для проверки хода выполнения, не завершается, пока не завершится основной вызов AJAX (создание отчета).
Проблемы при асинхронных вызовах, выполняемых методом AJAX проверки выполнения, происходят как на моей машине разработки, так и в производственной среде .Кажется, он перестает работать после того, как веб-сайт работает некоторое время.
Для меня это говорит о том, что что-то не убирается и не перестает работать.После перезапуска пула приложений в рабочей среде он снова начнет работать некоторое время.