Выполнение массовой обработки на странице ASP.NET - PullRequest
2 голосов
/ 20 января 2010

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

На что обратить внимание:

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

Мы решили, что идеальным решением было бы иметь отдельный исполняемый файл, который запланирован на ночь, а также обрабатывать и отправлять по электронной почте. Это решение имеет 2 основные проблемы:

  • Если веб-сайт был обновлен (бизнес-логика или модель), но исполняемый файл был случайно пропущен, тогда исполняемый файл мог прекратить отправлять электронные письма или, что еще хуже, отправлять их на основе устаревшей логики.
  • Мы надеемся использовать что-то вроде this , чтобы использовать UserControls для шаблонирования электронных писем, что, я не думаю, возможно за пределами веб-сайта ASP.NET

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

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

Так что вопрос такой: Есть ли у нас технические проблемы с этой настройкой?

Очевидно, что если вы попробовали что-то подобное, любые сообщения об успехе / неудаче будут оценены. Как и предложения альтернативных установок.

Приветствия

Ответы [ 6 ]

3 голосов
/ 20 января 2010

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

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

Чего вы хотите избежать, так это того, что ваш сайт рушится или выходит из строя из-за ограничений в обработчике процесса. Исходя из того, что вы используете слово «объем» в заголовке вопроса, они должны быть независимы друг от друга.

2 голосов
/ 20 января 2010

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

1 голос
/ 20 января 2010

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

  1. Переместите общую бизнес-логику в веб-службу или общую библиотеку. И ваш сайт, и ваш исполняемый файл / служба WCF могут использовать его, и это централизует логику. Если вы копируете и вставляете код, вы знаете, что что-то не так;)

  2. Если вам нужен шаблонизатор, можно вызывать классы ASP.Net для динамического создания страниц (см. BuildManager класс и сообщения в блоге, подобные этому . Если почтовая программа не полагается на события Page (чего, по-видимому, и нет), у вашего исполняемого файла не должно возникнуть проблем с загрузкой класса Page из сборки вашего сайта, динамическим построением и заполнением содержание.

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

0 голосов
/ 20 января 2010

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

Для сценария «когда наступают определенные даты» вы можете использовать простое решение для фоновых задач (см. Craig ответ) и делать то же, что и выше: анализ шаблона, создание сообщения и быстрая отправка в указанную службу.

Конечно, вы должны сделать это безопасно, тогда перезапуск пула приложений не нарушит ваши задачи.

0 голосов
/ 20 января 2010

Может быть, вам стоит взглянуть на что-то вроде http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

0 голосов
/ 20 января 2010

Похоже, вы должны создать рабочий поток, чтобы выполнить эту работу.

...