2009-05-28 24 views
7

Her Pazar gecesi başlayacak ve bir şey gerçekleştirecek bir ASP.net uygulaması için bir zamanlayıcıya sahip olmak istiyorum (veritabanında bir tabloyu güncelleyin). Ancak, web uygulamasına ek olarak sunucuda dağıtılması gereken bir hizmeti gerçekten yazmak istemiyorum. Bunu kolayca gerçekleştirmenin bir yolu var mı? Belki bir Global.asax dosyası kullanıyor musunuz?Asp.net'de Küresel Zamanlayıcı

+1

Bir web uygulamasının bunun için doğru bir araç olduğuna inanmıyorum, ancak önemli bir düşünceye devam ederseniz: uygulamanızı bu kadar uzun zaman planında yapmayı planlıyorsanız IIS'yi geri dönüştürmeyi devre dışı bırakın! – annakata

+1

yinelenen: http://stackoverflow.com/questions/542804/asp-netbest-way-to-run-scheduled-tasks –

+2

@mausch iyi bul ... Bu soruyu araştırmayı bitirdim ve http: // blog'u buldum .stackoverflow.com/2008/07/kolay-arka plan-görevleri-in-aspnet/benim için en iyi çözüm gibi görünüyor. – Darwyn

cevap

9

En iyi çözüm, this technique kullanmaktı. Sunucu üzerinde daha fazla kontrol sahibi olsaydım, muhtemelen zamanlanmış görevlerden yararlanmak için bir konsol uygulaması yazardım.

+0

Bu, en iyi örnek. Diğer her yorum sayfa ziyaretlerine dayanır. –

+0

Bu güzel – Zeus

3

Bir konsol uygulaması yazar ve zamanlamak için Zamanlanmış Görevler'u kullanırdım.

+0

Zamanlanmış Görevler sunucu üzerinde tam kontrole sahip olsaydım ideal olurdu ... Ne yazık ki yapmam. Bu seçeneğin farkındalığını artırmak için cevabınızı oylayacağım. – Darwyn

+0

Aslında, o bir kesmek, kesmek hoşuma gidiyor, ama bir kesmek. Denediğiniz başka bir hack ile anter cevabı ekledim. Ne yazık ki, ASP.NET'in yapmak istediğiniz şeyi doğrudan desteklediğini düşünmüyorum. – jrcs3

4

% 100 emin değilim bunu koyar, ancak bir System.Threading.Timer kullanarak bunu sallardı.

// In some constructor or method that runs when the app starts. 
// 1st parameter is the callback to be run every iteration. 
// 2nd parameter is optional parameters for the callback. 
// 3rd parameter is telling the timer when to start. 
// 4th parameter is telling the timer how often to run. 
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(TimerElapsed), null, new Timespan(0), new Timespan(24, 0, 0)); 

// The callback, no inside the method used above. 
// This will run every 24 hours. 
private void TimerElapsed(object o) 
{ 
    // Do stuff. 
} 

Başlangıçta,, saat ve alarm ilk kez ne zaman başlatılacağını belirlemek gerekecek, yoksa zaman Pazar gecesi bu zamanlayıcı çalışmasını istiyorum siteyi açabilirsiniz.

Diğerlerinin dediği gibi, bunu yapmak için siteden başka bir şey kullanın. Bununla başa çıkmak için bir Windows servisi yapmak çok kolay.

+0

Örneğinizdeki gibi bir zamanlayıcı koymak için en iyi yer Global.asax dosyasının Application_Start işleyicisinde olurdu. – Darwyn

+1

Bu zamanlayıcının çalışmadığından emin olmak için kesinlikle bir kontrol yapmanız gerekir. Bu örneği kullanan ve binlerce iş parçacığı üretme olanağını zaten görebiliyorum çünkü bunlar Application_Start olay işleyicisine bağlandı. –

0

Bir .NET uygulamasının sorununuz için iyi bir çözüm olduğunu sanmıyorum.

IIS Geri Dönüşüm işlemi, işlemi birkaç saatte bir (her seferinde yapılana bağlı olarak) geri dönüştürecek ve bu aralığı yedi güne ayarlasanız bile, uygulama havuzu hala denetiminizin dışındaki başka nedenlerle geri dönüştürülebilir.

jcrs3 ile katılıyorum: Sadece küçük bir konsol uygulaması yazmak ve zamanlayıcıyı kullanmak. Bir hizmet de yazabilirsiniz, ancak hızlı ve kolay bir şeye ihtiyacınız varsa, konsol uygulaması ile gidin. Planlanmış Görevler hakkında yorumunuza yanıt olarak

0

:

Başka kesmek yılında Global.asax, daha da sık sık Application_EndRequest (ister denir) bir olay geçersiz kılmak ve benzer bir şey yapmak olacaktır:

protected void Application_EndRequest() 
{ 
    if (((DateTime)Application["lastTimeRun"]) < DateTime.Today) 
    { 
     Application["lastTimeRun"] = DateTime.Today; 
     doSomething(); 
    } 
} 

tarihi değişti sonra bu ilk istek sonrasında aday olacağını, dolayısıyla bu her sabah 3:00 AM kesin çalıştırmak olacağını garanti olmaz.

Başka bir bilgisayarda Zamanlanmış Görev kullanarak siteye çarptığınız durumları bile ekledim.

1

ASP .NET gibi .NET kurumsal uygulaması için bir iş zamanlayıcısı olan Quartz .NET'u deneyin ve bu amaca hizmet etmelidir.