2015-07-22 3 views
4

Я хочу создать веб-приложение в MVC Asp.Net для бронирования номеров в отеле и управления клиентами. У меня возникают проблемы с одним из требований. Я хочу создать код для отправки SMS-сообщений клиентам в дни их рождения для желающих их из отеля. Я смущен, что где я должен поместить код для проверки клиентов с датой рождения такой же, как и сегодняшняя дата, так что Код запускается каждый день в 12:00, даже если веб-приложение не запущено. Пожалуйста, объясните, где я должен вставлять код?Дни рождения Напоминание Код для Asp.Net MVC

+0

Для этого можно создать отдельное настольное приложение (консоль, например).И запустите его в Windows Task Scheduler – MajkeloDev

+1

Вы посмотрели на Azure Webjobs? –

+1

Вы можете выполнить это требование через службы Windows. Следующая ссылка используется для получения некоторых сведений о службах Windows. [Учебное пособие по созданию простой службы Windows с примером примера в C# и VB.Net] (http://www.aspsnippets.com/Articles/Tutorial-to-create-a-simple-Windows-Service-with-sample-example -in-C-and-VBNet.aspx) – Sankar

ответ

5

Существует библиотека с открытым исходным кодом под названием Quarz, которая поможет вам в этом.

Mike Brind об этой библиотеке очень хорошо blog article. Библиотека предоставляет свободный API, который позволяет вам делать именно то, что вы хотите.

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

IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); 
scheduler.Start(); 

IJobDetail job = JobBuilder.Create<BirthdayJob>().Build(); 

ITrigger trigger = TriggerBuilder.Create() 
    .WithDailyTimeIntervalSchedule 
     (s => 
     s.WithIntervalInHours(24) 
     .OnEveryDay() 
     .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(12, 0)) 
     ) 
.Build(); 

scheduler.ScheduleJob(job, trigger); 

Он может работать в контексте веб-сайта, Windows Service или даже WinForms-приложение (пока пользователь не закрывает его).

В зависимости от контекста вам необходимо запланировать работу в разных местах. Для веб-сайта будет Application_Start() -Method. Для службы это будет OnStart() -Method.

Кроме того вам нужен класс «BirthdayJob», который обеспечит реальный код, который должен выполняться периодически:

public class BirthdayJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     // Check for birthdays... 
    } 
} 

Существует один момент вы должны знать, если вы вызываете этот код в контексте сайт:

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

Существует возможность изменить время ожидания для вашего сайта: В диспетчере IIS перейдите в «Пулы приложений», найдите пул приложений, который используется для вашего сайта, и выберите «Свойства» -> «Производительность». Там вы можете установить тайм-аут простоя. Существует несколько других подходов к решению этой проблемы.

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

Лучшим способом было бы позвонить в Quarz из Windows-Service, который будет работать, даже если ваши сайты будут спать или запихаться под столом.

+2

Quartz - это путь, но было бы лучше сделать его службой Windows. – 3dd

+0

Служба Windows также является хорошим решением, предположив, что он может установить один (это может быть проблемой для хостинг-провайдеров). Это также добавило бы сложности на сайт, но да, вы правы! +1 для вашего комментария. –

+0

Если я продолжу работу с Windows-сервисом или quarz, будет выполняться код, даже если мое веб-приложение не запрашивается никому. Я хочу сказать, что если никто не откроет приложение, как будет выполняться сегмент кода? –

2

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

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

+0

Downvoter хочет оставить комментарий? – npinti

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