2013-07-19 3 views
0

У меня есть веб-страница asp.net, в которой процесс события нажатия кнопки запускается в течение 35 минут, а в интерфейсе я использую ajax и показываю изображение последовательности выполнения. Если процесс (событие нажатия кнопки) завершается менее чем за 30 минут, то перезагрузка страницы выполняется успешно, иначе изображение «продолжается» показывается даже после завершения процесса, до момента времени AsyncPostBackTimeout (который установлен на 60 минут) и показывает сервер тайм-аут через 60 минут. Пожалуйста, дайте мне знать, если что-то я делаю неправильно.asp.net страница не отвечает через 30 минут

+0

Что именно он делает за 35 минут? Я ожидал бы, что обработчик событий ASP.NET не является подходящим местом для выполнения давно работающего кода. –

+2

Вы неправильно используете код сервера. Веб-запрос не должен оставаться в ожидании в течение тридцати пяти минут. Разделите свою работу на несколько кусков или используйте комету (http://en.wikipedia.org/wiki/Comet_%28programming%29) или аналогичную. –

+1

Ваш процесс занимает 30 минут сам по себе не так. Как вы думаете, пользователь будет так долго ждать на вашей странице? – Ehsan

ответ

2

Не видя своего кода, я не могу сказать вам, что происходит не так. Тем не менее, я могу порекомендовать несколько вариантов:

  • Разбить задачу на несколько шагов (вместо одной длинной цепочки). это может быть немного больше для пользователя, но по крайней мере они не остаются на странице на полчаса + (ouch!).
  • Используйте профайлер, чтобы узнать, что на самом деле занимает так много времени, и посмотрите, не можете ли вы оптимизировать код, чтобы сократить процесс. Например, если это вызов базы данных, имеет смысл сделать хранимую процедуру вместо нескольких выборок/обновлений (с данными, выполняемыми взад и вперед) - сохранить обработку на машине до тех пор, пока не понадобится окончательный результат.
  • Для длительных задач может иметь смысл разорвать процесс на службу или отдельный объект (и просто вернуть отчет службы). Например, MSMQ - отличный способ запустить выделенный сервис и передать задания при необходимости. Просто имейте в виду, теперь это создает еще один слой, который является еще одним местом для поддержания.
0

Если процесс занимает 30 минут, он может занять 60 минут или больше только потому, что ваши серверы будут заняты другими делами. Тогда подход в корне неверен.

Моим советом было бы поставить такие длинные задачи на другой уровень - системную службу. Служба запускает, выбирает задачи из очереди, выполняет один за другим. Передний слой просто просматривает каждые несколько секунд/минут, чтобы узнать, завершена ли операция. Или даже лучше, пользователи не ждут, они делают другие вещи и в конце концов каким-то образом им сообщают, что долговременная задача завершена.

Смежные вопросы