Dies ist eine mehrteilige Frage.ASP.NET HTTPHandlers und lange laufende Prozesse
Ich habe einen Prozess, der einige Minuten dauern kann, wird ausgeführt, indem ein HTTPHandler mit einer asynchronen Javascript-Anforderung aufgerufen wird.
Frage 1: Wie kann ich sicherstellen, dass diese Anfrage nicht auf dem Server und dem Client ausläuft?
Frage 2: Ist es möglich, Daten aus dem HTTPHandler während der Verarbeitung auszugeben, die zurück an das XmlHttpRequest-Objekt gesendet werden, bevor die letzte Seite abgeschlossen ist?
Ich möchte die tatsächliche Arbeitsbelastung berechnen und Prozentsatz zurückgeben. Ich schätze, dass das möglich ist.
Irgendwelche Tipps?
EDIT:
Ein schneller Test:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
for (int i = 0; i < 100; i++)
{
context.Response.Write("Hello World " + i + Environment.NewLine);
System.Threading.Thread.Sleep(500);
context.Response.Flush();
}
}
Schiebt Hallo Welt Stück für Stück an den Client ... Das auf einem synchronious Anfrage funktioniert, sehe ich werde, wenn ein XMLHttpRequest ein Readystatechange bekommt Ereignis für jede Zeile.
Ich habe immer Multithreading in ASP.NET-Anwendungen vermeiden, weil Sie nicht kontrollieren können, wann der Arbeitsprozess stirbt, was dazu führen wird, dass alle seine erzeugten Threads sterben.
Stattdessen, warum einen separaten Thread-Pool neu erfinden, wenn IIS dies bereits für Sie vornimmt.
Antwort auf neu zu erfinden einen Thread-Pool ... für lange laufenden Prozess nicht empfohlen, den Thread-Pool zu verwenden. http://msdn.microsoft.com/en-us/magazine/cc164128.aspx – Keltex