Скрипт обработки веб-формы для выполнения фоновых заданий на сервере и отправки по электронной почте, когда будет готов - PullRequest
0 голосов
/ 20 декабря 2010

Я разрабатываю приложение на C # ASP.NET, чтобы пользователи могли настраивать несколько графических шаблонов с логотипом своей компании.

Как правило,

  1. Пользователь загружает логотип своей компании.
  2. Пользователь выбирает несколько шаблонов (через форму HTML) различных типов файлов для настройки.
  3. Мое веб-приложение примет запрос пользователя, проверит каждый запрашиваемый элемент и определит его тип файла.Затем он вызовет соответствующий модуль в зависимости от типа файла (например, для настройки PDF) и, наконец, вставит логотип в шаблон.Эти шаги повторяются для каждого запрошенного файла.
  4. Как только все запрошенные шаблоны для пользователя сгенерированы, они группируются в zip-файл и по электронной почте отправляется ссылка для скачивания.

Мне хотелось бы получить несколько советов о том, как лучше всего принимать запросы пользователя и обрабатывать файлы в ASP.NET.

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

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

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

Как я могу реализовать второй вариант в C #?

1 Ответ

1 голос
/ 20 декабря 2010

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

  1. Пользователь «инициирует» «пакет» на сайте.Будь то настройка значений, загрузка какой-то партии для обработки и т. Д., Полностью зависит от того, что вы делаете.Суть в том, что пользователь запускает его.
  2. Необходимая информация о том, как процесс выполняет свою магию, сохраняется в базе данных, и пользователю сообщают, что процесс был поставлен в очередь на обработку.Теперь пользователь может заняться другими делами.
  3. Внутреннее приложение (или несколько приложений) периодически опрашивает базу данных (каждую минуту, каждые 5 минут и т. Д.) Или, в случае загруженного "Пакетный файл может использовать что-то вроде FileSystemWatcher, чтобы искать новые вещи и делать их.Используйте многопоточность или все, что вам нужно, чтобы это произошло, но суть в том, что это «автономный» процесс, которого веб-сайт не ожидает.
  4. Когда процесс завершается, в нем устанавливается какой-либо флаг.база данных (для обрабатываемой записи, или, возможно, записи «сообщения» в «почтовом ящике» пользователя и т. д.), указывающая, что процесс завершен.
  5. Пользовательский интерфейс веб-сайта имеет некоторый индикатор, который в любой момент загружаетсяпроверяет наличие вышеупомянутых флагов, чтобы указать пользователю, что процесс в очереди завершен и готов к просмотру.

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

Это в основном то, что вы ищете? Я чувствую, что могу быть более конкретным, у вас естькакие-либо особые опасения по поводу настройки?

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