Фоновая обработка блоков ASP.NET или обратная связь пользовательского интерфейса - PullRequest
1 голос
/ 12 ноября 2009

Я знаю, что этот вопрос задавался много раз, но моя проблема немного другая.

У меня есть страница, которая позволяет пользователю загружать и загружать файлы Excel. Во время загрузки файла Excel требуется около 2 минут для генерации файла. Я добавил контрольные точки, которые обновляют базу данных со статусом (начата обработка, работа с заголовком и т. Д.). Я сделал то же самое для загрузки.

У меня также есть запрос ajax, который проверяет базу данных через фиксированный интервал и печатает статус для пользователя, чтобы дать такие отзывы, как (начата обработка, работа с заголовком и т. Д.).

Проблема в том, что я получаю обратную связь только после завершения процесса. Похоже, что сеанс блокируется во время фонового процесса, и любой другой запрос (ajax) завершается только после завершения фонового процесса. Ajax делает приблизительно 10 запросов с интервалами в 4 секунды. Я получаю ответ 10 только в конце.

Я пробовал два iframe, а также фреймы, один из которых запускает ajax, а другой запускает процесс. Не работает. я пробовал отдельный браузер (процесс работает в IE, ajax работает в FF), и это работает (поэтому я теперь мой код работает). Кто-нибудь может посоветовать? Спасибо

p.s. Моя среда - IIS 6, ASP.NET 3.5 с браузером MVC 1.0 - IE6.0

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Ваш браузер имеет ограничение на количество подключений, которые могут работать одновременно.

Я считаю, что IE имеет ограничение в 2 соединения. Это означает, что даже если вы выполняете запросы AJAX, вы можете одновременно выполнять только два запроса.

Скорее всего, вы не видите результаты до конца, потому что он обрабатывает другие соединения и не получает запрос о статусе, пока он не завершен. Это также объясняет, почему это работает, когда вы делаете это из разных браузеров, потому что вы не страдаете от одного и того же ограничения соединения.

Вот статья , в которой подробно описана проблема.

0 голосов
/ 21 ноября 2009

Это именно то, что я искал (асинхронная обработка-в-Asp-нетто-MVC-с-АЯКС-прогресс-бар)

Использование делегата BeginInvoke из IAsyncResult помогло с заблокированным сеансом

...