Asynchrone Aufgabe mit ASP.NET anstoßen

01/06/2008 - 13:15 von Hilmar Bunjes | Report spam
Hallo,
ich stehe gerade etwas auf dem Schlauch bezüglich des Anstoßens einer
asynchronen Aufgabe in ASP.NET.

Ein Benutzer kommt auf die Webseite und führt eine Buchung durch. Diese
Buchung erfordert einige Aufrufe anderer WebServices und es werden
E-Mail verschickt. Da die Ausführung teilweise etwas Zeit in Anspruch
nehmen kann, soll der Benutzer nicht unnötig lange auf die Auslieferung
der Webseite warten. Insgesamt soll es so ablaufen (Punkt 3 und 4 können
auch in umgekehrter Reihenfolge stattfinden).

1. Benutzer führt Buchung durch
2. Buchung wird in Datenbank eingetragen
3. Benachrichtigungen werden angestoßen
4. Benutzer erhàlt Bestàtigung auf Webseite
5. Irgendwann sind die Benachrichtigungen fertig

Ich bin mir jetzt unsicher, wie ich die Benachrichtigungen starten
sollte. Eine Möglichkeit wàre wohl, einen externen Thread zu starten und
einfach laufen zu lassen. Ich bin mir aber unsicher, inwiefern das mit
dem Thread-Handling von ASP.NET vereinbar ist.

Kann mir jemand einen Rat geben, wie ein solches Szenario am besten zu
bewerkstelligen ist?

Vielen Dank,
Hilmar
 

Lesen sie die antworten

#1 Thomas Bandt
01/06/2008 - 15:04 | Warnen spam
Hilmar Bunjes schrieb:
Ich bin mir jetzt unsicher, wie ich die Benachrichtigungen starten
sollte. Eine Möglichkeit wàre wohl, einen externen Thread zu starten und
einfach laufen zu lassen. Ich bin mir aber unsicher, inwiefern das mit
dem Thread-Handling von ASP.NET vereinbar ist.



Imho keine gute Idee, da du damit die möglichen Threads
im ApplicationPool relativ schnell ausschöpfst - das
sind meiner Meinung nach Sachen, die nicht vom Webserver
erledigt gehören.

Kann mir jemand einen Rat geben, wie ein solches Szenario am besten zu
bewerkstelligen ist?



Möglichkeit 1 ist ein Windows-Dienst, der sich die Jobs
pollt, bsp. nachschaut ob in der DB eine neue Buchung
drin steht, die noch nicht entsprechend geflaggt ist.
Macht sinn bei regelmàßig reinkommenden Buchungen.

Möglichkeit 2 wàre z.B. eine Konsolen-Application, die
du von ASP.NET aus via

System.Diagnostics.Process.Start()

startest - die làuft dann in einem eigenen Prozess und
stört den Server nicht. Problematisch würde das ggf.
nur wenn mehrere Buchungen gleichzeitig verarbeitet
werden müssen - da wàre der Dienst, der alles nach
dem Motto "first in, first out" abarbeitet, besser.

Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung
http://www.dotnetjob.de - .NET-Stellenbörse
https://www.xing.com/net/asp.net/ - ASP.NET bei XING
http://blog.thomasbandt.de - Thomas goes .NET

Ähnliche fragen