Domanda

Abbiamo bisogno la possibilità di inviare e-mail automatica quando si verificano determinate date o quando si verificano alcune condizioni di business. Stiamo allestendo questo sistema per lavorare con un sito Web ASP.NET esistente. Ho avuto una chiacchierata con uno degli altri sviluppatori qui e aveva una discussione di alcune delle questioni.

Cose da notare:

  • Tutte le informazioni necessarie sono già modellato nel sito web ASP.NET
  • V'è una certa business logica che è necessario per la generazione e-mail, che è anche nel sito web già

Abbiamo deciso che la soluzione ideale era quello di avere un eseguibile separato che viene pianificata l'esecuzione durante la notte e fare il trattamento e-mail. Questa soluzione ha 2 problemi principali:

  • Se il sito è stato aggiornato (logica di business o modello), ma l'eseguibile è stato accidentalmente perso quindi l'eseguibile potrebbe interrompere l'invio di messaggi di posta elettronica, o peggio, essere inviando loro in base a logiche obsolete.
  • Speriamo di usare qualcosa come questo per utilizzare controlli utente al modello le email, che non credo sia possibile al di fuori di un ASP sito web .NET

Il primo problema avrebbe potuto essere evitato con gli script di build e distribuzione (che stiamo esaminando in questo momento comunque), ma non credo che siamo in grado di aggirare il secondo problema.

Quindi la soluzione abbiamo deciso è quello di avere una pagina ASP.NET che viene chiamato regolarmente da SSIS e di avere che fare un certo lasso di elaborazione (dicono 30 secondi) e poi tornare. So che una pagina ASP.NET non è il luogo ideale per fare questo tipo di elaborazione, ma questo sembra soddisfare al meglio le nostre esigenze. Abbiamo preso in considerazione la deposizione delle uova un nuovo thread (non dal pool dei lavoratori) per eseguire l'elaborazione ma abbiamo deciso che se abbiamo fatto che non abbiamo potuto utilizzare la pagina restituita a significare un successo o il fallimento. Con l'elaborazione all'interno del ciclo di vita della pagina possiamo usare il contenuto della pagina per dare un'indicazione di come il trattamento è andato.

Quindi la domanda è: Ci sono problemi tecnici che potremmo avere con questo set-up?

Ovviamente se avete provato qualcosa di simile eventuali segnalazioni di successo / insuccesso sarà apprezzato. Come suggerimenti saranno di alternative set-up.

Saluti,

È stato utile?

Soluzione

Non utilizzare il filo asp.net per fare questo. Se il sito sta generando alcune informazioni che è necessario al fine di creare o attivare la posta elettronica inviare poi avere il sito scrivere alcune informazioni in un file o database.

Creare un servizio di Windows o un processo pianificato che raccoglie le informazioni di cui ha bisogno da quel file o db ed eseguire il processo di invio e-mail su una completamente separato processo / thread.

Che cosa si vuole evitare è crash il vostro sito o crash del emailer a causa di limitazioni all'interno del gestore di processo. Sulla base l'utilizzo della parola "massa" nel titolo della domanda, i due hanno bisogno di essere indipendenti l'uno dall'altro.

Altri suggerimenti

Credo che si dovrebbe andare bene. Usiamo l'approccio simile nella nostra azienda per diversi anni e non si ottiene un sacco di problemi. A volte ci vuole più di un'ora per completare il processo. Recentemente abbiamo spostato il secondo filo (come hai detto) ad un server separato.

Avere l'emailer e il sito web accoppiati tra loro in grado di lavorare, ma non è davvero un buon design e sarà più manutenzione per voi nel lungo periodo. È possibile aggirare i problemi che lo stato facendo un paio di cose.

  1. Spostare la logica di business comune per un servizio web o una libreria comune. Sia il sito web e il vostro servizio / WCF eseguibile possono consumare esso, e centralizza la logica. Se stai copiando e incollando il codice, sapete che c'è qualcosa che non va;)

  2. Se avete bisogno di un modello di programma di posta, è possibile richiamare le classi ASP.NET per creare pagine per voi in modo dinamico (vedere la BuildManager di classe, e post sul blog come questo . Se il programma di posta non si basa su eventi di pagina (che non sembra), non ci dovrebbe essere alcun problema per il vostro eseguibile caricare una classe pagina dal tuo sito di assemblaggio, costruire in modo dinamico, e compilare il contenuto.

Questo rappresenta ovviamente una notevole quantità di lavoro, ma porterebbe ad una soluzione più scalabile per voi.

Suona come si dovrebbe essere la creazione di un thread di lavoro per fare quel lavoro.

Si può e deve costruire il vostro corpo del messaggio (corpo del messaggio su modelli) entro logica di dominio (che significa la vostra applicazione asp.net) quando alcune condizioni di business sono soddisfatte e inviarlo al servizio esterno che dovrebbe inviare solo i messaggi. Tutti i messaggi avranno informazioni corrette.

Per "quando si verificano determinate date" scenario è possibile utilizzare una soluzione semplice per le operazioni in background (vedi Craig risposta) e fare lo stesso come sopra: analizzare modello, costruire messaggio e veloce inviare servizio specificato .

Ovviamente si deve fare questo poi sicuri pool di app riavvio non rompe le attività.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top