2008-11-13 20 views
6

La mia applicazione ASP.NET necessita di numerosi servizi di supporto da eseguire periodicamente in background. Per esempio:Qual è il modo migliore per implementare i servizi in background per un'applicazione ASP.NET?

  • ho bisogno di interrogare il database (o cache) ogni 1-5 minuti, identificare gli elementi di lavoro in ritardo e informare gli utenti via email
  • ho bisogno di generare report notturno che vengono poi inviati via email agli abbonati
  • Inoltre altri compiti di amministrazione di sistema/non utente

Qual è il modo migliore per attuare questi servizi? Dovrei includerli come parte dell'applicazione web, iniziando un'istanza di ogni 'servizio' in Application_Start()? O crearli come servizi autonomi reali? Se facessero parte dell'applicazione Web, potrei potenzialmente utilizzare il mio archivio dati memorizzato nella cache, ma ci sono degli aspetti negativi in ​​questo approccio?

Grazie per qualsiasi consiglio.

+0

Vedere anche http: // stackoverflow.it/questions/1424837/best-asp-net-background-service-implementation – spoulson

risposta

6

Quest'anno avevo bisogno di implementare una singola attività per memorizzare alcuni dati da un database, dovevo verificare un codice che cambiava ogni n minuti, ho trovato questo articolo molto carino;

Simulate a Windows Service using ASP.NET to run scheduled jobs

ho fatto in quel modo e ha funzionato, ma come ho detto che ero era solo una singola attività, ma se si vede l'esempio di cui sopra si può vedere che svolge diversi compiti.

Come si può vedere, nella cache è possibile eseguire un'attività in qualsiasi momento e su intervalli, l'attività notturna può essere eseguita a mezzanotte, gli altri ogni n minuti o ore.

Spero che aiuti.

1

- Per la generazione di rapporti notturni, vorrei esaminare SQL Reporting Services perché dispongono di alcuni servizi di abbonamento nativi che consentono di inviare rapporti di posta elettronica agli utenti con codice virtuale non personalizzato.

- Per le notifiche scadute degli elementi di lavoro è possibile utilizzare SSRS (menzionato sopra) inviando loro un rapporto con gli elementi scaduti o, se si esegue SQL 2k5, utilizzare Notification Services.

+0

se si sta eseguendo SQL 2008, non utilizzare Notification Services in quanto è stato rimosso. – gbjbaanb

1

Faccio girare i thread ei thread di lavoro che fanno le cose periodicamente nella mia applicazione ASP.NET e non ho avuto alcun problema.

Non eseguo semplicemente l'app in casa - altri lo scaricano e lo eseguo sui loro siti, o lo eseguo presso le società di hosting, quindi fare le cose senza richiedere che un servizio sia installato rende le distribuzioni più facili.

1

Un timer combinato con un lavoratore di fondo ha funzionato bene per me:

Timer timer = new Timer(intervalSeconds * 1000) 
timer.Elapsed += delegate 
{ 
    // do the meat 
}; 
timer.Start(); 

Tenete a mente che non si avrà accesso al HttpContext e che il sito potrebbe spegnersi a causa di inattività.

0

Onestamente non sono mai stato un fan di provare a simulare un servizio di Windows all'interno di un processo ASP.net, soprattutto se si considera quanto sia facile creare un servizio di Windows. La maggior parte dei tentativi che ho visto nel fare questo sono stati pieni di problemi.

Problemi correlati