2009-08-21 15 views
2

Wir betreiben einen Web-Service als Website-Projekt. Clients stellen Anfragen, die nach ein paar Sekunden zurückkehren, aber einen Thread erzeugen, der stundenlang laufen sollte. Der Thread führt Webanfragen und -schreibvorgänge in einer Datenbank durch und wird mit Thread.Sleep Aufrufen gedrosselt.ASP.NET 2.0 Website erhält ThreadAbortException

Nach dem Ausführen für etwa 20 Minuten mit mehreren laufenden Threads erhalten alle Threads gleichzeitig eine ThreadAbortException. Thread.resetAbort hilft nicht. Die Ausnahme kann während eines SQL-Aufrufs, während einer Webanforderung oder während einer Thread.Sleep auftreten.

Ich dachte, das Problem könnte das httpRuntime Attribut executionTimeout in web.config sein, aber das hat das Problem nicht gelöst.

Irgendwelche anderen Ideen, was könnte alle unsere Threads töten?

+0

Haben Sie bei Ihrem Session-Timeout aussehen? Ich nehme an, dass diese Threads einer Sitzung und nicht der App gehören und als solche dem Timeout unterliegen können. –

+0

Gut gedacht, aber wir verwenden die Sitzung nicht. –

Antwort

2

Der Anwendungspool in IIS hat ein Leerlauf-Timeout. Es musste ausgeschaltet werden.

(Verwaltung> IIS. Rechtsklick auf den Anwendungspool> Eigenschaften. Registerkarte Leistung.)

3

Ich würde vermuten, dass die Webanwendung den Thread besitzt, und die Anwendung wird nach einer bestimmten Zeit beendet.

Wenn ich etwas wie das architect, würde ich ein Webservice schreiben, der yourp Ihre Klientenanfragen nimmt und sie in eine Datenbank legt, dann würde ich einen Windowsdienst schreiben, der diese Datenbank nach Klientenanfragen abfragt und die Faden hervorbringt die tun, was immer Sie brauchen (macht Web-Anfragen und schreibt in eine Datenbank). Es klingt wie das Schreiben einer Art Prozessor-Engine, und ich denke nicht, dass eine asp.net-App ein guter Ort ist, um so etwas zu hosten.

+0

Einverstanden. Ich kontrolliere nicht die Architektur dieses Projekts, aber diese Art von Problemen sind gute Argumente für dieses Argument. –