Перенаправление страницы при медленном выполнении Linq.DataContext.SubmitChanges () в ASP.NET - PullRequest
0 голосов
/ 29 апреля 2011

Для интранет-приложения у меня есть функция сохранения веб-страницы, которая может привести к значительным действиям в нескольких таблицах базы данных. Я использую Linq2SQL, и около 20 секунд простоя браузера поглощаются 3 отдельными Linq.DataContext.SubmitChanges() вызовами. Эти вызовы происходят прямо в конце кода, вызываемого обратной передачей SaveButton.

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

Идеальный рабочий процесс:

void btnSaveClick() 
{
    CalculateChangeSetProcedure
    Redirect somewhere...
    SubmitChangesProcedure
}

Так что моя проблема в Response.Redirect (..., true) просто отключит работу. Есть ли способ сделать это с помощью процедур ASP.NET или мне придется сделать это асинхронно в другом потоке?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Если вы пытаетесь отправить небольшой объем данных, то время простоя у вас не нормальное.Первое, что вы можете сделать, это проверить функцию отправки и посмотреть, есть ли что-то, что вы можете оптимизировать.Например, если вы отправляете 50 строк и вызываете SubmitChanges после каждой из них, это может значительно замедлить процесс.Решение в этом случае состоит в том, чтобы подготовить всю дату и представить ее сразу.

Другим вариантом является вызов службы, которая представляет изменения для вас.Таким образом, сохранение будет выполняться асинхронно и не будет прерывать пользователя.После того, как служба завершена, вы можете получить простое всплывающее окно jQuery или что-то, чтобы сообщить пользователю, что сохранение завершено, если это важно.

1 голос
/ 29 апреля 2011

Запустите отдельный фоновый поток для вызова SubmitChanges () перед выполнением перенаправления.

, например

void btnSaveClick() 
{    
      CalculateChangeSetProcedure
      ThreadPool.QueueUserWorkItem(new WaitCallback(this.SubmitTheStuff), null);
      Redirect somewhere..
}
private void SubmitTheStuff(object obj)
{
      SubmitChangesProcedure
}    
...