Anasayfa » Forum

ASP.Net C# MVC Bell...
 
Bildirimler

ASP.Net C# MVC Bellirli zamanlarda otomatik işlem yaptırmak?  

  RSS
Oğuzhan SARI
(@OguzhanSARI)
Üye

Merhaba arkadaşlar,

Back-end çok iyi değilim bu konuda ne şekilde arama yapacağımıda bilemedim.

Mantık basit, TCMB den döviz kurlarının örn. sabah 8:00 ve akşam 23:00 'te çekilmesi için fonksiyon var onu çalıştırmam gerekiyor.

En sağlıklı şekilde nasıl yapabilirim.

Alıntı
Gönderildi : 12/10/2016 23:12
Birol AYDOĞAN
(@birolaydugan)
Üye

internette Doviz kuarları ile ilgili hazır kodlar var , zamanlayıcı için ise basit bir Windows Servisi yazılabilir .

CevapAlıntı
Gönderildi : 13/10/2016 00:35
Volkan Alkılıç
(@volkanalkilic)
Üye

Merhaba,

Zamanlanmış görevler için internette sayısız açık kaynak kütüphane ve örnek bulabilirsiniz. Basit görevler için uzun zaman önce yazdığım bir kodu aşağıda paylaşıyorum. Buradaki mantık Timer ın bir sonraki çalışmasını hesaplamaktır. 

Not: Bu yöntem servis uygulamalırında kullanıldı. ASP.Net dünyasında oyun değişmektedir. Çünkü IIS belirli bir süre istek almayan prosesi otomatik olarak kapatır. Bu durum bir süre sonra kodun çalışmayacağı anlmanıa gelir.

Bu durumun çözümü için çeşitli yöntemler bulunmaktadır. 

Yöntem1: Windows zamanlanmış görevlerini kullanarak belirli aralıklarla sitenize istek gönderebilirsiniz.

Yöntem2: Online site monitor servislerini kullanarak sitenize belirli aralıklarla istek gönderebilirsiniz.

Yöntem3: IIS Manager > Application Pool > Advanced settings > Recycling > Regular Time Interval = 0 olarak set edebilirsiniz.

Bunlara benzer diğer farklı yöntemleri deneyebilirsiniz.

private void Test()
{
var tm = new Timer();
tm.Interval = (int)BirSonrakiÇalışmayıHesapla();
tm.Elapsed += (s, e) =>
{
tm.Stop();
//
//işinizi burada yapın
//
tm.Interval = (int)BirSonrakiÇalışmayıHesapla();
tm.Start();
};
tm.Start();
}

private string sonrakiÇalışma = "08";

private double BirSonrakiÇalışmayıHesapla()
{
DateTime dt = DateTime.MinValue;
switch (sonrakiÇalışma)
{
case "08":
dt = DateTime.Today.Add(new TimeSpan(08, 00, 0));
sonrakiÇalışma = "23";
break;
case "23":
dt = DateTime.Today.Add(new TimeSpan(23, 00, 0));
sonrakiÇalışma = "08";
break;
}
if (DateTime.Now > dt)
{
dt = dt.AddDays(1);
}
return dt.Subtract(DateTime.Now).TotalMilliseconds;
}

CevapAlıntı
Gönderildi : 13/12/2016 16:11
Mehmet UGUR
(@mehmetugur)
Üye

Volkan bey durumu kısaca özetlemiş, yazacaklarım her ne kadar aynı olsada yinede eklemek istedim.

Öncelikle proje web form mu yoksa windwos form mu ? Eğer web form ise herhangi bir timer kullanmana gerek yok. ilgili sayfanın page load ına kodu/fomskiyonu yazman yeterli, yanlış hatırlamıyorsam merkez bankası her iş gününün 15:30 unda xml servislerini aktif ediyor. 

Eğer projen windows form ise volkan beyinde dediği gibi fonksionu bir timer a bağlayıp o fonksiyonu belirlediğin tetikleme zamanlarında çalıştırman lazım

CevapAlıntı
Gönderildi : 14/12/2016 22:52
Paylaş: