Загрузите поток в браузер, используя Response.close / .end, как избежать отмены оставшейся части ответа? - PullRequest
0 голосов
/ 29 июля 2011

У меня 5MB MemoryStream, сгенерированный на сервере, и он должен был обслуживать пользователей как файл Excel.

Я использовал Response.close, чтобы загрузить его. Но наверняка он прервет все запросы / ответы на странице.

Мне известно, что использование страницы загрузки может помочь ветке, но как мне передать MemoryStream на страницу загрузки? Обычно он должен передать URL файла на эту страницу.

Есть идеи?

Больше комментариев: 1. Сначала я хочу передать файл клиенту. Для этого необходимо скачать свойство, которое можно использовать вместо Response.close (). 2. Во-вторых, во время загрузки клиента я хочу показать панель обработки (ПРОСТО ИЗОБРАЖЕНИЕ). Response.close остановит функцию JavaScript, чтобы скрыть панель.

Так как для достижения обоих требуется? Спасибо

В любом случае, спасибо. Сложность в том, что после Response.End или CompleteRequest был отправлен заголовок Http. Я не смогу получить доступ к чему-либо в конце. Я действительно должен использовать отдельную страницу, которая обрабатывает логику процесса, а также используется для загрузки файла.

Ответы [ 3 ]

0 голосов
/ 29 июля 2011

Ваш вопрос немного неясен.Вы спрашиваете, как закончить ответ, не заканчивая ответ.Вы хотите, чтобы оставшаяся часть кода запускалась после того, как ответ был сброшен клиенту?Или у вас есть проблема с неправильным фактическим ответом?

Использование Response.Close () может быть проблематичным, так как он в основном сбрасывает HTTP-соединение с клиентом.См. Это сообщение в блоге MSDN и MSDN Response.Close () Ссылка .

Если вы сможете более подробно описать возникшую проблему, я могу обновить свой ответ.

0 голосов
/ 29 июля 2011
0 голосов
/ 29 июля 2011

Должна ли логика генерации вашего файла Excel находиться на отдельной странице или в обработчике?


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

Просто идея, не уверен, что это работает.Если вы гуглите индикатор прогресса AJAX, вы можете найти несколько примеров.Надеюсь, это поможет

...