Il runtime di ASP.NET è pensato per carichi di lavoro brevi che possono essere eseguiti in parallelo. Devo essere in grado di pianificare eventi periodici e attività in background che possono essere eseguite o meno per periodi molto più lunghi.Progettazione di una libreria di task asincrona per ASP.NET
premesso ho i seguenti problemi da affrontare:
- all'AppDomain può spegnere causa di cambiamenti (Web.config, bin, App_Code, etc.)
- IIS ricicla AppPool su una regolarmente (ogni giorno)
- IIS si potrebbe riavviare, o per quella materia il server potrebbe bloccarsi
io non sono convinto che l'esecuzione di questo codice all'interno di ASP.NET non è la cosa giusta da fare, becuase permetterebbe un modello di programmazione più semplice. Tuttavia, fare ciò richiederebbe che un servizio esterno effettui periodicamente richieste all'applicazione in modo che l'applicazione sia in esecuzione e che tutte le attività in background siano programmate con la massima cura. Dovranno essere in grado di mettere in pausa e riprendere il loro lavoro, in caso di errore imprevisto.
mia attuale linea di pensiero più o meno così:
Se tutti i lavori vengono registrati nel database, dovrebbe essere possibile utilizzare il database come un meccanismo di contabilità. Nel caso di un errore, il database conterrà tutti gli stati necessari per riprendere l'operazione alla prossima opportunità data.
Mi piacerebbe davvero dare un po 'di feedback/consigli su questo argomento. Ho preso in considerazione l'esecuzione di un servizio di Windows e l'utilizzo di alcune soluzioni RPC, ma non ha lo stesso appeal per me. Avrei invece avuto un sacco di problemi di distribuzione e attività ricognitive e il codice attraversava diverse applicazioni. A causa delle mie esigenze di lavoro, questo è meno che ottimale.
+1 per il collegamento all'articolo sull'esecuzione della procedura asincrona. –
Questo è fantastico, sfortunatamente non tutte le attività in background possono essere scritte solo in T-SQL, molte probabilmente potrebbero, ma al momento, abbiamo un supporto per il debug limitato per T-SQL, così come, cose che devono essere in C# codice, come l'invio di e-mail. Inoltre, alcune di queste trasformazioni che facciamo, sembrano davvero scomode in SQL e sono spesso più facili da mantenere usando il codice C#. Sulle tabelle come code, ho fatto qualcosa di simile in passato, ma non ho visto prima queste varianti, grazie per i link. –
L'attivazione può avviare anche le procedure CLR e c'è anche un attivatore esterno che può avviare processi ordinari (.exe): http://blogs.msdn.com/b/sql_service_broker/archive/2008/11/21/announcing- service-broker-external-activator.aspx –