2010-06-29 2 views
1

Всякий раз, когда я использую TransmitFile для отправки файла, sirte становится заблокированным для пользователя до тех пор, пока файл не завершится. IOW, пользователь не может перемещаться по сайту.ASP.NET TransmitFile заставляет сайт блокировать

Если пользователь отменяет передачу, он по-прежнему блокируется до тех пор, пока сайт не выйдет из строя ИЛИ не закончит отправку данных. Я не могу сказать, что, но я знаю, если, например, я отменяю 30 МБ-файл сразу после запуска загрузки, потребуется больше времени для восстановления, чем 10 МБ-файл.

Вот соответствующий код:

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

ответ

2

Фигурные это и я лучше разместить его в случае, если я получаю эту проблему еще раз или кто-то другой имеет эту проблему.

Проблема связана с тем, что на моей странице используются данные сеанса. Моя страница загрузки нуждается в данных сеанса, чтобы запомнить некоторые вещи, такие как сортировка, условия поиска и т. Д. Я должен отметить, что на странице также отображаются файлы и выполняется код выше при нажатии кнопки.

Из-за этого, когда мой код загрузки (фрагмент выше) запускается, передача защищена IIS, чтобы обеспечить сохранение данных сеанса. Это, как и должно быть при обычной навигации по страницам, но явно нежелательно для передачи файлов.

Перемещение кода загрузки из этой страницы и в тот, который не имеет данных сеанса, загрузка может произойти, когда пользователь с радостью продолжает перемещаться по сайту.

Я также сделал новую страницу загрузки с EnableSessionState="False" в директиве Page, чтобы гарантировать, что она не будет использовать сеанс.

Смежные вопросы