Asp.Net sayfamizda zamanlanmis görevler olusturmak istersek eger bunu farkli yollarla gerçeklestirebiliriz. Birinci yol olarak hosting sunucumuzun kontrol paneline girerek oradan zamanlanmis görevler kismindan hangi saatte hangi günlerde hangi sayfamizin çalismasini istiyorsak bunu belirleyebiliriz. Belirledigimiz zaman ve tarihlerde ilgili sayfa çalistirilip islemlerinizi gerçeklestirebiliriz.
Yada bunu bir class yazarak gerçeklestirebiliriz. Classimizi global.asax sayfamizdan çagiracagiz. Peki bu global.asax dosyasi ne ise yarar, bir göz atalim.
Global.asax dosyasi tipki web.config dosyasi gibi özel bir dosyadir ve sadece server üzerinde çalistirilir yani disaridan çagrildiginda herhangi bir sayfa görüntülenmez. Peki niye kullanilir ne gibi durumlarda ihtiyaç duyulur, hangi kisimlara sahiptir, bunlara deginelim. Örnegin, uygulamamiz ilk çalistirildiginda ya da server restart edildikten sonra ilk çalisan Application_Start yordamidir. Uygulama ilk yüklendiginde Application_Start yordaminin çalismasi Global.asax’da tanimlanmistir. Yine en çok sik kullanilan yordamlardan Application_Error, herhangi bir istenmeyen bir hata meydana geldiginde çalisir ve yine Global.asax’da tanimlidir. Asagida Global.asax dosyasi içinde yer alan yordamlarin listesini görebilirsiniz.
Application_Start : Uygulama ilk kez çalistirildiginda bir defaya mahsus olmak üzere çalisir.
Application_End : Uygulamanin sonlanmasinda hemen önce çalisir.
Application_Error : Uygulama içinde istenmeyen bir hata meydana geldiginde çalisir.
Application_BeginRequest : Serverden her istek yapildiginda çalisir.
Application_EndRequest : Serverden her istek yapilip sonlandiktan sonra çalisir.
Application_PreSendRequestHeaders : Baslik bilgileri tarayiciya gönderilmeden önce çalisir.
Application_PreRequestContent : Içerik bilgileri tarayiciya gönderilmeden önce çalisir.
Application_AuthenticationRequest : Kullanici kimlik dogrulamasi yapilmadan hemen önce çalisir.
Application_AuthorizeRequest : Kullanici yetkilendirmesinden önce çalisir.
Simdide ZamanlanmisGorevlerS class dosyamiza bir göz atalim.
Imports System
Imports System.IO
Imports System.Timers
Imports Microsoft.VisualBasic
Imports MySql.Data.MySqlClient
Imports System.Web.HttpContext
Public Class ZamanlanmisGorevlerS
Private Shared _AlarmTimer As Timer
Public Shared sorgu As New MySqlCommand
Public Shared Sub ZamanliAlarmBaslat()
'7200000 = 2 saat
'43200000 = 12 saat
'86400000 = 1 gün (24 saat)
_AlarmTimer = New Timer(30000) ' 30 saniye olarak belirledim
AddHandler _AlarmTimer.Elapsed, New ElapsedEventHandler(AddressOf OnAlarmEvent)
' Timer kontrolumuzun Elapsed olayini addHandler'e gönderip zamanlama süresi geldiginde hangi metotumuzun çalisacagini bildiriyoruz.
_AlarmTimer.Enabled = True
_AlarmTimer.Start()
' AlarmTimer nesnemizi baslatiyoruz. Yukarida bilgilere göre 30'sn de bir OnAlarmEvent metotumuzu çalisacaktir.
End Sub
Private Shared Sub OnAlarmEvent(source As Object, e As ElapsedEventArgs)
Dim th As New System.Threading.Thread(AddressOf ZamanlanmisGorevler)
th.IsBackground = True
th.Start()
' Burasi is parçacigi ile ilgilidir. Uygulama çalisirken birden fazla islem yapabilbilmesini saglar.
End Sub
Public Shared Sub ZamanlanmisGorevler()
' Burada ise belirledigimiz zamanda hangi islemleri yaptirmak istiyorsak yaptirabilirsiniz.
' Belirlediginiz zaman geldiginde her gün buradaki islemler yapilacaktir.
End Sub
End Class
Peki class dosyamizdan sonra ne yapacagiz ? Global.asax dosyamiza gidecegiz. Sizde tahmin edersiniz ki Application_Start yordamini kullanacagiz.
Hazirladigimiz ZamanlanmisGorevlerS class dosyamizi burdan çagirmamiz gerekiyor.
<%@ Application Language="VB" %>
<script runat="server">
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
'Call ZamanliGorevSinifi.ZamanliAlarmBaslat()
End Sub
Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application shutdown
End Sub
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a new session is started
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when a session ends.
' Note: The Session_End event is raised only when the sessionstate mode
' is set to InProc in the Web.config file. If session mode is set to StateServer
' or SQLServer, the event is not raised.
End Sub
</script>
Call ZamanlanmisGorevlerS.ZamanliAlarmBaslat() kisminda Call metodu ile Class dosyamizi çagiriyoruz. Web sayfamiz bir kez çagirdiktan sonra veya sunucu kisminda restart edildikten sonra global.asax dosyamiz bir kez okunur ardindan islemleri yapmaya devam eder.