время ожидания браузера, пока приложение asp.net продолжает работать - PullRequest
5 голосов
/ 11 марта 2009

Я сталкиваюсь с ситуацией, когда ASP.NET требуется много времени для генерации ответа с веб-страницей (более 2 часов). Это из-за того, что код запускается некоторое время (очень длинный, медленный цикл).

Браузер (как IE, так и Firefox) перестает ждать ответа (примерно через час) и выдает общее сообщение об ошибке веб-страницы (похоже на то, что вы увидите, если попытаетесь перейти на несуществующий сервер).

В то же время приложение asp.net продолжает работать (я вижу это в отладчике) и в итоге завершает работу.

Почему это происходит? Есть ли какие-либо настройки в web.config, чтобы повлиять на это? Я надеюсь, что есть установка тайм-аута, что я пропускаю, которая вызывает это.

Может быть, настройки в IE или Firefox? Но я думаю, что они ждут, пока сервер поддерживает соединение.

Я испытываю это, даже когда запускаю приложение в режиме отладки (с отладкой компиляции = "true") на моей локальной машине из VS (так что это не работает на IIS, но на ASP.NET Dev Server).

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

Я понимаю, что могу изменить дизайн этой проблемы, запустив логику в фоновый процесс и получая уведомления, когда это будет сделано через AJAX, или перенести его в настольное приложение или службу или что-то еще. Что-то в этом роде будет сделано в конце концов, но сейчас я об этом не спрашиваю.

Ответы [ 4 ]

6 голосов
/ 11 марта 2009

Похоже, вы используете IE, и время ожидания ожидания ответа от сервера истекло.

Вы можете найти статью technet, чтобы отрегулировать этот предел:

http://support.microsoft.com/kb/181050

ПРИЧИНА

По своему замыслу Internet Explorer налагает ограничение по времени для сервера вернуть данные. Тайм-аут пять минут для версий 4.0 и 4.01 и 60 минут для версий 5.x, 6, и 7. В результате Internet Explorer не ждет бесконечно сервера вернуться с данными, когда сервер есть проблема. Вернуться к началу

РАЗРЕШЕНИЕ

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

4 голосов
/ 11 марта 2009

Вся парадигма Интернета - запрос / ответ. Не просьба, подождите два часа, ответьте!

Если работа занимает так много времени, то запрос страницы должен инициировать работу, а затем не ждать ее. Поместите долгосрочный код в службу Windows, и пусть служба прослушивает очередь MSMQ (или использует WCF с конечной точкой MSMQ). Пусть страница отправит запросы на работу в эту очередь. Служба прочитает запрос, возможно, запустит новый поток для его обработки, затем запишет ответ в другую очередь, файл или что-то еще.

Та же страница или другая страница «прогресса» могут опрашивать очередь ответов или файл для ответов и обновлять пользователя, предполагая, что пользователь все еще заботится после двух часов.

3 голосов
/ 11 марта 2009

Для чего-то, что занимает так много времени, я бы нашел способ запустить его через AJAX, а затем периодически проверять его состояние. Фоновый процесс должен регулярно обновлять некоторую переменную состояния и сохранять ее данные в кеше или сеансе после завершения. Когда он завершится и браузер обнаружит это (через AJAX), пусть браузер выполнит реальную обратную передачу (или получит путем изменения location.href), заберет сохраненные данные и сгенерирует страницу.

0 голосов
/ 08 мая 2009

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

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