Запрос jquery .ajax заблокирован из-за длительного выполнения запроса .ajax - PullRequest
1 голос
/ 10 марта 2010

Я пытаюсь использовать функцию jauery .ajax для создания индикатора выполнения.

Запрос отправляется через .ajax, который запускает длительный процесс. После передачи другой .ajax-запрос вызывается с интервалом, который проверяет ход этого процесса. Затем индикатор прогресса обновляется с использованием этой информации.

Однако, вызов процесса .ajax возвращается только после завершения длительного процесса. Это как если бы он был заблокирован первоначальным запросом.

Странно то, что этот процесс отлично работает на dev, но не работает на сервере развертывания. Я использую ASP.Net MVC на IIS.

Обновление: очевидно, это связано с браузером, потому что он отлично работает в IE 7, но не работает в IE 8. Это странно, потому что IE 8 допускает до 6 подключений в широкополосной сети, где IE 7 разрешает только 2 запроса на домен.

Обновление 2: я думаю, что это локальная проблема, потому что она, кажется, работает нормально на другом компьютере с IE 8.

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Сервер будет запускать только одну страницу за раз от каждого пользователя. Когда вы отправляете запросы на получение статуса выполнения, они будут поставлены в очередь.

Решение состоит в том, чтобы сделать страницу, которая возвращает статус безсессионной, используя EnableSessionState="false" в директиве @Page. Таким образом, он не связан ни с одним пользователем, поэтому запрос не ставится в очередь.

Это, конечно, означает, что вы не можете использовать состояние сеанса для передачи состояния прогресса из потока, выполняющего процесс, в поток, получающий состояние. Вы должны использовать другой способ отслеживания запущенных процессов и отправить некоторый идентификатор вместе с запросами, которые получают статус, чтобы вы знали, от какого пользователя он пришел.

1 голос
/ 05 января 2013

Создайте обработчик Asynchronus (IHttpAsyncHandler) для вашего второго запроса AJAX.

используйте любой параметр, требуемый через строку запроса .ashx, для обработки того, что вы хотите, потому что HttpContext не будет иметь то, что вам нужно. У вас почти не будет доступа к объекту Application.

За кулисами ASP.NET создаст для вас поток из пула CLR, а не из пула приложений, поэтому вы получите дополнительный прирост производительности с IHttpAsyncHandler

1 голос
/ 10 марта 2010

Некоторые браузеры (в частности, IE) допускают только два запроса к одному домену одновременно. Если в это же время происходят другие запросы, вы можете столкнуться с этим ограничением. Одним из способов решения этой проблемы является использование нескольких различных псевдонимов для домена (некоторые сайты используют «www1.example.com» и «www2.example.com» и т. Д.)

Вы должны иметь возможность использовать Firebug или Fiddler для определения количества выполняемых запросов и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...