Forum

ASP.Net C# MVC Bell...
 
Bildirimler
Hepsini Temizle

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

4 Yazılar
4 Üyeler
0 Reactions
4,666 Görüntüleme
(@OguzhanSARI)
Gönderiler: 69
Estimable Member
Konu başlatıcı
 

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.

 
Gönderildi : 12/10/2016 23:12

(@birolaydugan)
Gönderiler: 867
Prominent Member
 

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

 
Gönderildi : 13/10/2016 00:35

(@volkanalkilic)
Gönderiler: 137
Estimable Member
 

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;
}

 
Gönderildi : 13/12/2016 16:11

(@mehmetugur)
Gönderiler: 277
Reputable Member
 

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

 
Gönderildi : 14/12/2016 22:52

Paylaş: