Ausführen von asynchronen Vorgängen, die garantiert auf einer IIS-Website ausgeführt werden, auch wenn ein App-Pool wiederverwendet wird

8

Bestimmte Aktionen, die Benutzer meiner Website ausführen, führen zum Senden von E-Mails. Der Code, der E-Mails sendet, kann für eine Weile blockieren, also möchte ich dies aus dem Thread ihres HTTP-Anforderungshandlers heraus tun.

Momentan verwende ich etwas wie:

%Vor%

Zum größten Teil funktioniert das. Die Website wird jedoch in einer gehosteten Umgebung ausgeführt, in der der App-Pool wiederverwendet werden kann.

Ab und zu erhalte ich keine E-Mail, die gesendet werden sollte, und ich vermute, dass dieses Arbeitselement in der Warteschlange des Threadpools beim Recycling des Anwendungspools gelöscht wird.

Wie kann ich eine solche Ansync-Operation durchführen und sicherstellen, dass sie in einem solchen Fall abgeschlossen wird?

    
Drew Noakes 07.08.2012, 10:33
quelle

2 Antworten

8

Wenn Ihre Anwendung im integrierten Modus ausgeführt wird, können Sie Ihren Mail-Dispatcher-Dienst in der Host-Umgebung registrieren. Der Host benachrichtigt Ihren Dienst , bevor ein Recycling durchgeführt wird. Es führt 2 Aufrufe für Ihre Implementierung von IRegisteredObject.Stop aus. Beim ersten Anruf gibt der Host Ihnen die Möglichkeit, den Job zu beenden. Wenn das Zeitlimit erreicht ist und Ihr Dienst sich nicht vom Host entfernt hat, wird ein weiterer Anruf getätigt, aber dieses Mal nur, um mitzuteilen, dass das Recycling mit oder ohne die Zustimmung des Dienstes durchgeführt wird.

Dies ist ein Beispiel (nicht getestet), wie Sie die Stop () Methode implementieren können:

%Vor%

Starten Sie den Dienst und registrieren Sie ihn auf dem Host.

%Vor%     
devundef 07.08.2012, 14:14
quelle
2

Die beste Option wäre hier die Verwendung einer persistenten Nachrichtenwarteschlange oder eines Dienstbusses. Ihre App schreibt die E-Mail-Anfrage in die Warteschlange, der Warteschlangen-Handler (der Ihre Web-App sein könnte) liest die Warteschlange und verarbeitet die Nachricht. Wenn die Dinge sterben, beginnt der Persistenzwinkel - die Nachrichten hängen herum, bis sie verarbeitet werden können.

    
Wyatt Barnett 07.08.2012 14:27
quelle

Tags und Links