2010-06-29 21 views
1

Chaque fois que j'utilise TransmitFile pour envoyer un fichier, la sirte est bloquée à l'utilisateur jusqu'à la fin du fichier. IOW, l'utilisateur ne peut pas naviguer sur le site.ASP.NET TransmitFile provoque le blocage du site

Si l'utilisateur annule le transfert, il bloque toujours jusqu'à ce que le site expire ou finisse d'envoyer les données. Je ne peux pas dire lequel, mais je sais si par exemple j'annule un fichier de 30 Mo immédiatement après le démarrage du téléchargement, il faut plus de temps pour récupérer qu'un fichier de 10 Mo.

Voici le code correspondant:

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", contdisp); 
Response.AddHeader("Content-Length", new FileInfo(fullfilename).Length.ToString()); 
Response.TransmitFile(fullfilename); 
Response.Flush(); 

Répondre

2

cela et Figured je poste mieux au cas où j'obtenir à nouveau le problème ou quelqu'un d'autre a ce problème.

Le problème est dû au fait que ma page utilise des données de session. Ma page de téléchargement a besoin de ces données de session pour se souvenir de certaines choses comme le tri, les termes de recherche, etc. Je devrais noter que la page affiche également les fichiers et exécute le code ci-dessus en cliquant sur un bouton. Pour cette raison, lorsque mon code de téléchargement (extrait ci-dessus) s'exécute, le transfert est protégé par IIS pour assurer que les données de session restent intactes. C'est comme il devrait être sous la navigation normale de la page, mais évidemment indésirable pour un transfert de fichiers. En déplaçant le code de téléchargement de cette page vers un autre qui ne contient aucune donnée de session, le téléchargement peut avoir lieu pendant que l'utilisateur continue à naviguer sur le site.

J'ai également fait la nouvelle page de téléchargement avec le EnableSessionState="False" dans la directive Page pour assurer qu'il n'utiliserait pas la session.