2011-02-08 11 views
14

Sto sviluppando la mia prima applicazione Web utilizzando ASP.Net MVC e mi trovo in una situazione in cui desidero che un servizio in background elabori le notifiche di stato all'esterno dell'applicazione, non diversamente dal sistema di reputazione/badge su StackOverflow.Come implementare l'elaborazione in background per il sito Web ASP.Net MVC in un ambiente di hosting condiviso?

Qual è il modo migliore per gestire qualcosa di simile? È persino possibile in un ambiente di hosting condiviso come Godaddy, che sto usando.

Non è necessario comunicare direttamente con l'operatore in background, poiché aggiungerò i record di notifica a una tabella di database con una colonna impostata su uno stato "non elaborato". Quindi il lavoratore eseguirà la scansione del tavolo regolarmente e elaborerà ciò che è pronto.

Grazie per il vostro consiglio.

+0

Potresti dirci di più sul lavoro in background? Ci vuole molto? è intensiva della CPU? Quali sono i principali motivi per cui non riesci a eseguirlo insieme alla richiesta? –

+0

Sicuro. Il processo in background elaborerà le notifiche sullo stato dei pagamenti che vengono fornite in modo asincrono da Paypal. A seconda dello stato, il lavoro eseguirà diverse operazioni del database. Non è troppo intenso e attualmente lo elabora all'interno dell'applicazione. Ma sembrava essere un progetto migliore solo per registrare le informazioni in una tabella al momento del ricevimento e avere l'operatore in background per elaborarlo. – JimDaniel

risposta

7

Hai provato con quartz.net? Penso che possa adattarsi alle tue esigenze.

+0

Ok, solo così capisco, se eseguo un processo al quarzo da global.asax, ciò assicurerebbe che funzionasse finché il sito web era in esecuzione? Perché sarebbe esattamente quello di cui ho bisogno. – JimDaniel

+0

Sì! lo hai impostato su application_start. – uvita

+0

sfortunatamente Godaddy applica la fiducia media su IIS, questo limita l'uso del quarzo – Luther

3

Per rispondere se GoDaddy supporterà un servizio separato, è necessario chiedere loro.

Tuttavia, esistono diversi modi creativi per "aggirare" questo problema sull'hosting condiviso.

  1. Avere una pagina protetta che è lo scopo è quello di eseguire il lavoro in background. Potresti avere un'attività pianificata su una macchina sotto il tuo controllo che chiama questa pagina web a intervalli regolari.
  2. Utilizzare una variazione della risposta Thread Worker Thread da @safi. Il thread in background può verificare se un altro è già in elaborazione e interrotto, in modo che sia in esecuzione una sola istanza alla volta.
+0

# 1 è quello che vorrei. Alcuni provider di hosting come DiscountASP ti consentono anche di specificare un URL che il loro server esegue il polling a intervalli predefiniti, essenzialmente per consentire l'implementazione n. 1 –

+0

Una variante di # 1 sarebbe un servizio REST sicuro e leggero. Forse un semplice metodo 'JsonResult', chiamato da un client (che lo chiama di volta in volta). Fondamentalmente la stessa idea, fatta in un modo un po 'più elegante. – rsenna

5

anche dare un'occhiata a questo articolo Simulate a Windows Service using ASP.NET to run scheduled jobs.

spiega un buon modo per pianificare le operazioni senza dipendenza esterna.

L'idea è di utilizzare il timeout della cache per controllare il programma. L'ho implementato con successo su un progetto che richiedeva la pulizia periodica dei file temporanei. Questa pulizia è un po 'pesante, quindi spostiamo questa operazione pulita in un lavoro pianificato (utilizzando la cache di asp.net) per evitare di dover distribuire attività pianificate o programmi personalizzati.

+0

Tecnica eccellente! Sembra che questo sia stato effettivamente utilizzato su StackOverflow.com. Vedi: http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/. – Jonathan

1

Se è sufficiente un solo task in background, utilizzare WebBackgrounder E questo è il article con spiegazione dettagliata.

Problemi correlati