vivekgvivi Ответов: 1

Веб-страница отображается как " ожидание” даже после того, как код завершает весь фоновый процесс


Я разработал веб-приложение, которое вставляет записи в PL/SQL, используя приведенный ниже код
trans_status = myDataAdapter.Update(ds, "LoadedTable");

Описанный выше процесс обновления занимает приблизительно 30 минут, чтобы завершить процесс.

Весь код после myDataAdapter.Update(ds, "LoadedTable"); выполняется без каких-либо проблем, но все равно страница не обновляется. Веб-страница продолжает ждать и никогда не выдает сообщение "загружено успешно".

Все вышесказанное происходит по щелчку кнопки.

Шаг 1: Загрузка записей с SQL server.[что занимает около 14 секунд]
Шаг 2: вставьте все записи, извлеченные из SQL в Oracle с помощью myDataAdapter.Update(ds, "LoadedTable") [что занимает около 30 минут]
Шаг 3: уведомление пользователя по электронной почте [я получаю уведомление по электронной почте]
    transtatus = myDataAdapter.Update(ds, "LoadedTable");
}
if (transtatus == -1)
{
    sql.SendStatusEmail("sample@abc.com", "Transaction Failed");
}
else
{
    sql.SendStatusEmail("sample@abc.com", "Transaction Successful");
}

Шаг 4: обновите некоторые таблицы SQL с успехом / неудачей [все таблицы будут успешно обновлены]
Шаг 5: отображение сообщения об успехе в метке [ничего не отображается, так как страница продолжает ждать]
if (TranSuccess == true)
{
    lblMsg.Text = "Transation Successfull";
    lblMsg.Visible = true;

Шаг 6: загрузите сетку со свежими записями из SQL
    gvFileList.DataBind();
    gvProcessedFileList.DataBind();
}


Привязка Gridview на последнем шаге в событии click.

Чтобы убедиться, что элемент управления подходит к последнему оператору, я написал код для записи некоторых деталей в обычный текст после gvProcessedFileList.DataBind();, и я тоже мог бы найти результат.

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

Пожалуйста, помогите мне решить этот вопрос.

Что я уже пробовал:

1. Увеличено время ожидания выполнения.
2. попробовал вставить код в каждое действие после "myDataAdapter.Update (ds, "LoadedTable")", чтобы убедиться, что элемент управления возвращается на страницу после инструкции oracle update.
3. Поставьте Ответ.Перенаправление как последний оператор в событии Click, чтобы проверить, перенаправляется ли страница. Хотя управление приходит в строку кода, перенаправление действия не происходит.

F-ES Sitecore

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

ZurdoDev

Итак, вы нажимаете кнопку и ожидаете, что соединение все еще будет активным через 30 минут? Не очень вероятно, произойдет. Измените его на ajax.

1 Ответов

Рейтинг:
0

Dave Kreskowiak

У вас есть польза ждать 30 минут загрузки страницы, пока произойдет это обновление SQL?

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

Не позволяйте пользователю сидеть там, уставившись на вращающийся курсор в течение получаса.

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

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

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