Как отправлять почту автоматически с помощью службы Windows в asp.net MVC - PullRequest
0 голосов
/ 06 июля 2011

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

Теперь мне нужно отправлять почту автоматически с использованием службы Windows каждые 30 минут выбранным пользователям во время встречи.Например, если встреча для пользователя начинается с 14:00 до 16:00, почту нужно отправлять каждые 30 минут, начиная с 14:00 до 16:00.

Я установил службу Windows.Но я не знаю, как связать свой веб-проект MVC со службой Windows.Я использую базу данных MDF в своем веб-проекте.Я не знаю, как обрабатывать эти данные в оконной службе.

Пожалуйста, предложите мне какой-нибудь способ.Я совершенно новичок в сфере MVC и Windows.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 09 июля 2014

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

Revalee - это служба, которая позволяет планировать обратные вызовы в Интернете для приложения ASP.NET MVC. Revalee управляет сохранением и планированием задач с помощью службы Windows, но использует приложение ASP.NET MVC для обработки процесса обработки (т. Е. «Работы»). В вашем случае вы будете использовать приложение MVC для отправки автоматических сообщений электронной почты пользователю, когда приложение MVC было отозвано Revalee.

Ниже приведен обзор рабочего процесса, используемого приложением MVC с Revalee:

Revalee Workflow http://revalee.sageanalytic.com/Images/workflow.png

Когда назначена встреча, ваше приложение зарегистрирует действие обратного вызова в Revalee. Это будет включать дату и время обратного вызова приложения MVC, а также URL для вызова. Поэтому для регистрации обратного вызова в Revalee вы можете включить в приложение MVC следующий метод.

private void ScheduleAppointmentReminderEmail(int appointmentId)
{
    // The DetermineAppointmentReminderTime() method is your private method
    // which returns an appointment's next reminder time as a DateTimeOffset.
    DateTimeOffset callbackTime = DetermineAppointmentReminderTime(appointmentId);

    // The callback should at the task's end time
    Uri callbackUrl = new Uri(
            string.Format(
                    "http://mywebapp.com/Email/SendAppointmentEmail/{0}",
                    appointmentId
                )
        );

    // Register the callback request with the Revalee service
    RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
}

Когда ваше MVC-приложение получает обратный вызов, действие SendAppointmentEmail может выглядеть следующим образом:

[AllowAnonymous]
[CallbackAction]
public ActionResult SendAppointmentEmail(int appointmentId)
{
    // TODO   1. Validate the appointmentId,
    //        2. Lookup the appointment's information, &
    //        3. Send the email message
    // ...

    return new EmptyResult();
}

На веб-сайте Revalee имеется полный справочник по API, а также инструкции по установке и настройке службы Windows. Служба доступна для простого развертывания и установки на Chocolatey , в то время как клиентские библиотеки MVC, готовые для использования в Visual Studio, доступны на NuGet . (Существуют не-MVC клиентские библиотеки .) Естественно, что в качестве проекта с открытым исходным кодом полный исходный код Revalee доступен на GitHub .

Наконец, в случае, если это не было ясно выше, Служба Revalee - это не внешняя сторонняя служба сетевого планировщика, а служба Windows, которая устанавливает и и полностью контролирует вашу собственную сеть. Он находится и работает на сервере Windows по вашему выбору, где он может получать запросы регистрации обратного вызова из вашего приложения ASP.NET MVC.

Надеюсь, это поможет. Гук удачи!

Отказ от ответственности: Я был одним из разработчиков, вовлеченных в проект Revalee. Для ясности, однако, Revalee - это бесплатное программное обеспечение с открытым исходным кодом. Исходный код доступен на GitHub .

1 голос
/ 06 июля 2011

Я не очень хорошо понял ваш вопрос, однако точкой соединения между веб-приложением и службой Windows является база данных. Ваше веб-приложение записывает в базу данных ожидающие встречи. Затем служба Windows проверяет каждые 30 минут, например, существует ли ожидающая встреча, для которой она должна отправлять электронные письма. Если он обнаруживает, что ему необходимо отправить несколько электронных писем, он отправляет их и помечает запись в БД как завершенную (это означает, что он отправил уведомления). Вы также можете использовать Quartz.net , как я уже упоминал в другом ответе , но служба Windows также является хорошим решением.

0 голосов
/ 06 июля 2011

Вам не нужно использовать службу Windows. Все, что вы описали, может быть решено с помощью встроенного в приложение HttpModule aka Global.asax.

Концепция высокого уровня состоит в том, чтобы поддерживать работоспособность HttpApplication и в течение срока службы приложения, которым является ваше веб-приложение MVC, развернутое в IIS. Это должно предотвратить запуск Application_End из-за неактивности по умолчанию в 20 минут.

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

Существует пример кода проекта: http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

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