2009-08-03 8 views
1

J'ai un problème avec mon application Pelotonics. Lorsqu'un utilisateur télécharge un fichier, le système semble bloquer toutes les demandes entrantes jusqu'à ce que le téléchargement de ce fichier soit terminé. Quelle est la technique appropriée pour ouvrir une boîte de dialogue de téléchargement (standard depuis le navigateur), laissez l'utilisateur commencer à télécharger le fichier, puis pendant le téléchargement du fichier, laissez l'utilisateur continuer à travers l'application.Lors du téléchargement d'un fichier, toutes les demandes sont bloquées

La façon dont nous obtenons le fichier à partir du serveur est que nous avons une page ASPX séparée qui est passée dans une valeur à travers la chaîne de requête, puis récupère le flux du fichier du serveur, puis j'ajoute le -disposition "en-tête à la réponse, puis en boucle dans le flux du fichier et lire les blocs de 2 Ko à la response.outputstream. Puis, une fois cela fait, je fais une Response.End.

Suivre cet un screencast rapide sur la question:

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

par ailleurs, nous sommes dans ASP.NET et C# ...

Merci !!! Daniel

Répondre

0

Je pense que ASP.NET permet une exécution de page simultanée par session et je ne suis pas au courant d'un moyen de configurer cela autrement.

Ce n'est pas une solution de contournement très jolie, mais cela peut être utile si vous avez réécrit la valeur ASP.NET_SESSIONID dans le cookie de demande dans Application_BeginRequest (dans global.asax). Bien sûr, vous auriez besoin de l'authentification d'une autre manière. Je n'ai pas essayé cela, cependant.

Une autre façon serait de lancer un thread séparé pour le processus de téléchargement, mais vous auriez besoin de trouver un moyen de le faire sans que le thread de travail ne ferme ses ressources.

Puis-je demander, y a-t-il une raison pour laquelle vous n'utilisez pas simplement HttpResponse.TransmitFile?

+0

Non, Skrim, c'était en ASP classique. –

+0

qui était en ASP classique? – Skrim

+0

TransmitFile prend en paramètre un nom de fichier. Le fichier que je reçois se trouve sur les serveurs de fichiers Cloud de Rackspace. J'ai donc besoin de m'authentifier dans leurs serveurs, d'obtenir le fichier (en tant que Stream) et d'écrire ce flux sur le Response.OutputStream. Je suis assez sûr que TransmitFile ne fonctionne pas comme ça ... Je l'ai trouvé mais l'article MSDN ne répond pas exactement au problème: http://forums.asp.net/t/1112997.aspx –