Фоновая обработка блоков ASP.NET или обратная связь с пользовательским интерфейсом
Я знаю, что этот вопрос задавался много раз, но моя проблема немного другая.
У меня есть страница, которая позволяет пользователю скачать и загрузить файл Excel. Во время загрузки файла Excel требуется около 2 минут для создания файла. Я добавил контрольные точки, которые обновляют базу данных со статусом (начата обработка, работа с заголовком и т. Д.). Я сделал то же самое для загрузки.
У меня также есть ajax-запрос, который проверяет базу данных через фиксированный интервал и выводит информацию о статусе пользователю, чтобы он оставил отзыв (например, начата обработка, работа с заголовком и т. Д.)
Проблема в том, что я получаю обратную связь только после завершения процесса. Похоже, что сеанс блокируется во время фонового процесса, и любой другой запрос (ajax) выполняется только после завершения фонового процесса. Ajax делает приблизительно 10 запросов с интервалами в 4 секунды. Я получаю ответ 10 только в конце.
Я пробовал два iframe, а также фреймы, один работает ajax, а другой работает процесс, не работает. я пробовал отдельный браузер (процесс работает в IE, ajax работает в FF), и это работает (поэтому я теперь мой код работает). Кто-нибудь может посоветовать? Спасибо
PS Моя среда - IIS 6, ASP.NET 3.5 с браузером MVC 1.0 - IE6.0.
2 ответа
Это именно то, что я искал (асинхронная обработка в asp-net-mvc-with-ajax-progress-bar)
Использование делегата BeginInvoke из IAsyncResult помогло в заблокированном сеансе
Ваш браузер имеет ограничение на количество подключений, которые могут работать одновременно.
Я считаю, что IE имеет ограничение в 2 соединения. Это означает, что даже если вы выполняете запросы AJAX, вы можете одновременно выполнять только два запроса.
По всей вероятности, вы не видите результаты до конца, потому что он обрабатывает другие соединения и не получает запрос о состоянии, пока он не будет завершен. Это также объясняет, почему это работает, когда вы делаете это из разных браузеров, потому что вы не страдаете от того же ограничения соединения.
Вот статья, которая детализирует проблему.