ASP.NET TransmitFile вызывает блокировку сайта - PullRequest
1 голос
/ 29 июня 2010

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

Если пользователь отменяет передачу, он все еще блокируется, пока сайт не истечет время ожидания ИЛИ не завершит отправку данных.Я не могу сказать, какие именно, но я знаю, что, например, если я отменил файл размером 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();

1 Ответ

2 голосов
/ 30 июня 2010

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

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

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

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

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

...