длительный процесс в asp.net C # - PullRequest
3 голосов
/ 12 мая 2010

У меня есть веб-приложение, которое имеет длительный (ресурсоемкий) процесс в коде, а конечным результатом является файл PDF (инструмент преобразования изображений в PDF)

Он работает нормально ... и поскольку я сейчас на выделенном сервере, это совсем не проблема для ресурсов.

Однако мне интересно, что система достигла бы своих ограничений ресурсов, если одновременно обрабатывается более 20 пользователей.

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

Может кто-нибудь дать мне представление о том, как реализовать такую ​​логику в приложениях asp.net с использованием C #?

Ответы [ 3 ]

5 голосов
/ 12 мая 2010

Такая система будет состоять из службы Windows, работающей на сервере. Единственное, что делает страница asp.net, - это отправляет запрос (с соответствующими данными) в базу данных. Затем служба Windows отслеживает эту таблицу и обрабатывает все новые запросы.

0 голосов
/ 21 сентября 2014

Как правильно заметил Клаус, мы должны реализовать это с помощью служб Windows.
Приложение к его ответу:
(i) Разделить длительный процесс на несколько задач
(ii) Для каждой задачи создайте отдельное консольное приложение и идентифицируйте каждое приложение с помощью applicationId.

enum ApplicationId:byte
{
  Router = 1,
  Task1 =  2,
  Task2 =  3,
  Task3 =  4,
  Task4 =  5,
  Email = 6
}

(iii) Вызов одного приложения в качестве маршрутизатора. Он будет перемещать транзакции из одного приложения в другое.
(iv) Теперь создайте таблицу сactionId, nextAppId и любыми другими соответствующими полями
(v) После выполнения задачи обновите nextAppId в таблице
. (vi) Запланируйте все приложения в планировщике задач Windows или используйте активный пакетный сервер (коммерчески)
(vii) Последнее приложение «Электронная почта» отправляет пользователю электронное письмо со сгенерированным PDF в виде вложения.

Надеюсь, что это ответы !!!!. Хорошего дня !!!

0 голосов
/ 12 мая 2010

Вы хотите ограничить количество одновременных запросов. Вы можете создать отдельное приложение для обработки процесса преобразования. Либо служба Windows, либо запланированная задача, которая выполняется с регулярным интервалом.

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

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

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