2015-12-14 2 views
1

У меня есть полный код для отправки ежедневной почты на адрес истечения срока действия для пользователя. мое описание кода ниже:Отправить Daily Mail пользователю в 12:00 с помощью ASP.NET

Global.asax:

 
void Application_Start(object sender, EventArgs e) 
{

System.Timers.Timer myTimer = new System.Timers.Timer();   
    double inter = (double)GetNextInterval();   
    myTimer.Interval = inter;   
    myTimer.AutoReset = true; 
    myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed); 
    myTimer.Enabled = true; 
} 

частные двойной GetNextInterval() {

string timeString; 
    timeString = "12:00 AM"; 
    DateTime t = DateTime.Parse(timeString); 
    TimeSpan ts = new TimeSpan(); 
    int x; 
    ts = t - System.DateTime.Now; 
    if (ts.TotalMilliseconds < 0) 
    { 
     ts = t.AddDays(1) - System.DateTime.Now; 
    } 
    return ts.TotalMilliseconds; 
} 

общественного недействительного myTimer_Elapsed (источник объекта, System.Timers.ElapsedEventArgs е) {

// My Mail Code }

Этот код i работа для первой почты, но я хочу ежедневно отправлять почту.

Как это возможно?

+0

Вы не можете использовать Windows Service .. – RajeeshMenoth

+0

нет я использую только этот код –

+0

ваши GetNextInterval() возвращает интервал, основанный на времени начала приложения –

ответ

2

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

+1

Я думаю, вам нужно будет добавить дополнительную информацию о том, почему вы рекомендуете консольное приложение, потому что я думаю, что OP не знает, почему веб-приложение, размещенное IIS, не пригодится в этом случае. – khlr

+0

ОК 1. Это просто для выполнения вашей задачи. 2. код в вашем веб-приложении выполняется только тогда, когда пользователь проходит через приложение. –

+0

@BudaGavril прав, его лучший способ достичь вашей задачи - создать консольное приложение, оно может быть установлено на том же компьютере, на котором установлено ваше приложение. Для создания этой службы я рекомендую вам использовать TopShelf –

0

Вы можете запланировать любую процедуру на стороне кода с использованием Quartz.NET

Но есть проблема. Если приложение asp.net остается неактивным (не получает никаких запросов), он укладывается спать из IIS.

У вас есть 2 варианта. Change IIS Settings держать приложение бассейн всегда просыпаются или poke your application with dummy request сек любым способом, чтобы предотвратить его от сна

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

Предоставляйте свои своевременные задачи как услуги wcf.

Разработка службы Windows, которая запускает Quartz и вызывает эти службы wcf своевременно.

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

Смежные вопросы