Durchführen von Massenverarbeitung in ASP.NET-Seite
-
21-09-2019 - |
Frage
Wir brauchen die Möglichkeit, automatische E-Mails zu versenden, wenn bestimmte Daten auftreten oder wenn einige Geschäftsbedingungen erfüllt sind. Wir setzen mit einer vorhandenen ASP.NET-Website, dieses System zu Arbeit. Ich habe mit einem der anderen Devs einen Chat hatte hier und hatte eine Diskussion über einige der Themen.
Dinge zu beachten:
- Alle Informationen, die wir brauchen bereits in der ASP.NET-Website modelliert
- Es gibt einige Geschäftslogik, die für die E-Mail-Generation erforderlich ist, die auch schon in der Website ist
Wir haben uns entschieden, dass die ideale Lösung eine separate ausführbare Datei haben war, die über Nacht laufen geplant ist und tun, um die Verarbeitung und E-Mail. Diese Lösung hat zwei Hauptprobleme:
- Wenn die Website aktualisiert wurde (Business-Logik oder Modell), aber die ausführbare Datei wurde versehentlich verpasst dann die ausführbare Datei stoppen könnten E-Mails, oder schlimmer noch, werden sie basierend auf veralteten Logik zu senden.
- Wir hoffen, wie etwas zu verwenden,
Lösung
Verwenden Sie den asp.net Thread nicht, dies zu tun. Wenn die Website einige Informationen generiert, dass Sie benötigen, um zu erstellen oder zu triggern haben die E-Mail-senden dann die Website schreiben Sie einige Informationen in einer Datei oder Datenbank.
Erstellen Sie einen Windows-Dienst oder geplanten Prozess, der die Informationen sammelt es aus dieser Datei oder db benötigt und die E-Mail läuft Prozess sendet auf einem völlig separaten Prozess / Thread.
Was Sie wollen vermeiden, Ihre Website abstürzt oder Absturz Ihren emailer aufgrund von Einschränkungen im Prozess Handler. Basierend auf Ihren Gebrauch des Wortes „bulk“ in der Frage Titel, um die beiden müssen voneinander unabhängig sein.
Andere Tipps
Ich denke, man sollte in Ordnung sein. Wir verwenden den ähnlichen Ansatz in unserem Unternehmen seit mehreren Jahren und nicht über eine Menge Probleme bekommen. Manchmal dauert es über eine Stunde, um den Prozess zu beenden. Vor kurzem haben wir das zweite Gewinde (wie Sie gesagt haben) auf einen separaten Server.
Mit der emailer und die Website verbunden zusammenarbeiten können, aber es ist nicht wirklich ein gutes Design und mehr Wartung auf lange Sicht für Sie sein. Sie können die Probleme umgehen Sie, indem Sie ein paar Dinge angeben.
-
Bewegen Sie die gemeinsame Business-Logik zu einem Webdienst oder gemeinsame Bibliothek. Sowohl Ihre Website und die ausführbare Datei / WCF-Dienst kann es verbrauchen, und es zentralisiert die Logik. Wenn Sie das Kopieren und Einfügen von Code, wissen Sie, es ist etwas falsch ist;)
-
Wenn Sie eine Vorlage Mailer benötigen, ist es möglich, ASP.Net Klassen aufzurufen, für Sie zu erstellen Seiten dynamisch (siehe Buildmanager Klasse und
Sounds wie Sie sollten einen Worker-Thread erschaffen, diesen Job zu tun.
Vielleicht sollte man etwas anschaut wie http://blog.stackoverflow.com / 2008/07 / easy-Hintergrund-Aufgaben-in-aspnet /
Sie können Ihre Nachricht Körper (Templat Nachrichtentext) innerhalb Domain Logik aufbauen sollten (es bedeutet, dass Ihre asp.net Anwendung), wenn einige Geschäftsbedingungen erfüllt sind und es an externem Service senden, die Ihre Nachrichten nur senden sollen. Alle Nachrichten werden richtige Informationen haben.
Für Szenario „wenn bestimmte Daten auftreten“ können Sie einfache Lösung für Hintergrundaufgaben (Blick auf Craig Antwort) verwenden und das gleiche tun wie oben: Parse-Vorlage, Build Nachricht und schnell send zu bestimmtem Service .
Natürlich sollten Sie diese sicher dann AppPool Neustarts tun nicht bricht Ihre Aufgaben.