Dikarenakan AppPool Pada IIS akan sleep jika aplikasi tidak diakses selama ± 20 menit, maka cara terbaik untuk membuat programmable scheduler adalah di windows service. Untuk contoh projectnya dapat diunduh di sini. Terkait apa saja yang perlu diubah akan dijelaskan di bawah.
ProjectInstaller.Designer.cs
private void InitializeComponent()
{
serviceProcessInstaller = new ServiceProcessInstaller();
serviceInstaller = new ServiceInstaller();
//
// serviceProcessInstaller
//
serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
serviceProcessInstaller.Password = null;
serviceProcessInstaller.Username = null;
//
// serviceInstaller
//
serviceInstaller.Description = "Delva Scheduler Service"; //ubah Description
serviceInstaller.DisplayName = "Delva Scheduler"; //ubah DisplayName
serviceInstaller.ServiceName = "DelvaScheduler"; //ubah ServiceName
serviceInstaller.StartType = ServiceStartMode.Automatic;
serviceInstaller.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);
//
// ProjectInstaller
//
Installers.AddRange(new Installer[]
{
serviceProcessInstaller,
serviceInstaller
});
}
Setelah itu membuat logic dari scheduler, untuk contoh ini akan membuat scheduler untuk generate work order. Ada tiga class yang dibutuhkan untuk satu jenis scheduler.
1. Class Task
2. Class Job
3. Class Scheduler
Class Task berisi dari perintah kerja dari scheduler, class ini akan berjalan secara sequence asynchronous. Jika task sebelumnya belum selesai dieksekusi akan ditunda dulu sampai task sebelumnya selesai.
Class Job digunakan untuk mengeksekusi Class Task. Class ini harus turunan dari Interface IJob.
Class Scheduler digunakan untuk menjadwalkan Class Job.
Setelah semua class yang dibutuhkan sudah dibuat, langkah selanjutnya adalah implemtasi scheduler pada event windows service. Yang perlu diubah adalah event OnStart. Tekan F7 untuk menampilkan code pada file Service.cs.
Service.cs
public partial class Service : ServiceBase
{
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//ubah bagian ini
WorkOrderScheduler.Start();
}
protected override void OnStop()
{
StdSchedulerFactory.GetDefaultScheduler().Result.Shutdown();
}
protected override void OnContinue()
{
StdSchedulerFactory.GetDefaultScheduler().Result.ResumeAll();
}
protected override void OnPause()
{
StdSchedulerFactory.GetDefaultScheduler().Result.PauseAll();
}
internal void Test(string[] args)
{
OnStart(args);
Console.ReadLine();
OnStop();
}
}
Deploy & Install
1. Ubah build config dari debug ke release, lalu build projectnya
2. Copy file hasil build tersebut ke folder Publish
3. Kompres folder Publish ke zip, rar atau lainnya
4. Copy file hasil kompresi folder Publish ke server, lalu ekstrak
5. Run as Administrator file Install.bat