Как я продолжаю работать над сервером после возврата ответа с ASP.NET? (WebForms и MVC)

Я думаю, что нет способа продолжить массовую вставку после сбоя транзакции. Если вам нужно сохранить все оставшиеся значения, вы должны сохранить каждое значение отдельно в методе save(), отмеченном как @Transactional(propagation = Propagation.REQUIRES_NEW), взгляните на документы . Вы также должны поймать DataIntegrityViolationException где-нибудь, пока он еще не сломается.

9
задан devdevdev 2 December 2008 в 20:18
поделиться

6 ответов

Мы делаем это для легкой ситуации с входом:

Action<object> d = delegate(object val)
{
    // in this anonymous delegate, write code that you want to run
    ProcessDataAndLog();
};

d.BeginInvoke(null, null, null); // this spins off the method asynchronously.

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

Править:

Следующее также работает и возможно немного более очевидно для Вашего коллеги - кодера. Это - по существу то же, но по-видимому быстрее и Вы не должны волноваться о вызове EndInvoke ().

System.Threading.ThreadPool.QueueUserWorkItem(
    delegate(object state)
    {
        // in this anonymous delegate, write code that you want to run
        ProcessDataAndLog();
    });

Дальнейшее чтение: Пул потоков и Асинхронные методы и Асинхронный делегат по сравнению с пулом потоков и потоком и вызовом EndInvoke действительно не вызывают утечку памяти?

6
ответ дан 4 December 2019 в 22:31
поделиться

Одним путем я сделал это в прошлом, какие игры несколько приятно с веб-моделью, должен иметь "частную" страницу/веб-сервис, которая ответственна за начинание обработки и прислушивается к вызову к ней. Довольно легко иметь страницу, асинхронно говорят с другой страницей и затем продолжают то, что делает пользователь.

1
ответ дан 4 December 2019 в 22:31
поделиться

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

1
ответ дан 4 December 2019 в 22:31
поделиться

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

//save the photo on the server
//Add referance in queue (possibly in database to http post that the windows service monitors with details of path to the file, output path, transformation etc.)
//and send viewdata saying "thanks..."
return View();

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

Colin G.

0
ответ дан 4 December 2019 в 22:31
поделиться

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

0
ответ дан 4 December 2019 в 22:31
поделиться

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

Посмотрите, можно ли найти что-то при поиске "ASP.NET, запускают Поток"

0
ответ дан 4 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: