2009-08-03 10 views
1

Ich habe ein Problem in meiner Anwendung Pelotonics. Wenn ein Benutzer eine Datei herunterlädt, scheint das System alle eingehenden Anfragen zu blockieren, bis diese Datei heruntergeladen ist. Was ist die richtige Technik, um ein Download-Dialogfeld zu öffnen (Standard aus dem Browser), lassen Sie den Benutzer beginnen, die Datei herunterladen, dann während der Download der Datei, lassen Sie den Benutzer in der gesamten Anwendung weiter.Während des Downloads einer Datei sind alle Anfragen blockiert

Die Art und Weise, wie wir die Datei vom Server bekommen, ist eine separate ASPX-Seite, die in einem Wert über die Abfragezeichenfolge übergeben wird, ruft dann den Stream der Datei vom Server ab und fügt dann den "Inhalt" hinzu -disposition "header zu der Antwort und dann Schleife durch den Strom der Datei und lesen 2KB Chunks aus dem response.outputstream. Dann, wenn das erledigt ist, mache ich eine Response.End.

Dit für eine schnelle Screencasts auf die Frage:

http://www.screencast.com/users/PeloCast/folders/Jing/media/8bb4b1dd-ac66-4f84-a1a3-7fc64cd650c0

durch die Art und Weise sind wir in ASP.NET und C# ...

Dank !!! Daniel

Antwort

0

Ich denke, ASP.NET ermöglicht eine gleichzeitige Seite Ausführung pro Sitzung und ich bin mir nicht bewusst, eine Möglichkeit, dies sonst zu konfigurieren.

Dies ist keine sehr schöne Problemumgehung, aber es könnte hilfreich sein, wenn Sie den Wert ASP.NET_SESSIONID in Application_BeginRequest (in global.asax) in das Anforderungs-Cookie umschreiben. Natürlich müssten Sie die Authentifizierung auf andere Weise durchführen. Ich habe das nicht versucht.

Ein anderer Weg wäre das Starten eines separaten Threads für den Download-Prozess, aber Sie müssen einen Weg finden, wie dies getan werden kann, ohne dass der Worker-Thread seine Ressourcen schließt.

Darf ich fragen, gibt es einen Grund, warum Sie nicht einfach HttpResponse.TransmitFile verwenden?

+0

Nein, Skrim, das war im klassischen ASP. –

+0

was war in klassischem ASP? – Skrim

+0

TransmitFile nimmt einen Dateinamen Parameter. Die Datei, die ich erhalte, befindet sich auf den Cloud Files Servern von Rackspace. Daher muss ich mich bei ihren Servern authentifizieren, die Datei (als Stream) holen und diesen Stream in Response.OutputStream schreiben. Ich bin mir ziemlich sicher, TransmitFile funktioniert nicht so ... Ich fand dies, aber der MSDN-Artikel beantwortet nicht genau das Problem: http://forums.asp.net/t/1112997.aspx –