2010-05-12 5 views
3

У меня есть веб-приложение, которое имеет длинный ход (ресурсоемким) процесс в коде позади и выходной конец является PDF файл (изображения в инструмент преобразования PDF)длительный процесс, работающий в asp.net C#

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

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

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

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

ответ

5

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

0

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

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

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

+0

Благодарим вас за ответ. прошу извинить меня, если я понял это неправильно. 1. Таким образом, я создаю службу выигрыша, которая позволяет принимать в качестве входных данных местоположение изображения и адрес электронной почты и выводит местоположение файла pdf. 2. Когда запрос отправляется с веб-интерфейса, я регистрирую местоположения изображений и адрес электронной почты в базе данных. и скажем также, что колонка говорит, что закончен или нет. Я не понимаю, как сделать ваш второй пункт. Как у вас есть служба Windows для МОНИТОРА базы данных? Можете ли вы привести меня к учебнику или дать мне фрагмент? Большое спасибо, Prasad. – pessi

0

Как Клаус справедливо указывал, мы реализовать его с помощью окна служб
Добавление к его ответу:
(я) Сплит длинный выполняющийся процесс на несколько задач
(б) Для каждой задачи, создать отдельное консольное приложение & удостоверение каждого приложения с помощью applicationId.

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

(iii) Позвоните в одно приложение в качестве маршрутизатора. Он перемещает транзакции из одного приложения в другое.
(IV) Теперь создаст таблицу с TransactionID, nextAppId и любыми другими соответствующими областями
(v) После завершения задачи обновления nextAppId в таблице
(VI) Расписание всех приложения в окне планировщик задач или использовать активную пакетные сервер (коммерчески)
(VII) Последнее приложение «электронная почта» отправляет электронное письмо с сгенерированным PDF в качестве приложения к пользователю

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