C # Запись в выходной поток - PullRequest
0 голосов
/ 19 января 2009

Этот код всегда заставляет мою страницу aspx загружаться дважды. И это не имеет ничего общего с AutoEventWireup.

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BufferOutput = true;
byte[] response = GetDocument(doclocation);
Response.AddHeader("Content-Length", response.Length.ToString());
Response.BinaryWrite(response);
Response.End();

Этот код загрузит мою страницу только один раз (как и должно быть), когда я жестко закодирую некоторые фиктивные значения.

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "inline;filename=data.pdf");
Response.BufferOutput = true;
byte[] response = new byte[] {10,11,12,13};
Response.AddHeader("Content-Length", response.Length.ToString());
Response.BinaryWrite(response);
Response.End();

Я также увеличил длину запроса для проверки в файле web.config.

<httpRuntime executionTimeout="180" maxRequestLength="400000"/>

Все еще ничего. Кто-нибудь видит что-то, чего я не вижу?

Ответы [ 4 ]

1 голос
/ 19 января 2009
GetDocument(doclocation);

Может быть, этот метод как-то возвращает код перенаправления? или может быть iframe или img для вашего динамического контента?

Если так:

Обычно элемент управления может вызываться дважды из-за ответа URL. Сначала он рендерит контент. После этого ваш браузер пытается загрузить источник тега (iframe, img), который фактически является динамическим контентом, который генерируется. Так что он делает еще один запрос к веб-серверу. В этом случае создается другой объект страницы с другим состоянием просмотра, поскольку это другой запрос.

0 голосов
/ 22 апреля 2009

Вы уже нашли решение для этого? У меня та же проблема, мой код в значительной степени отражает ваше. Основное отличие заключается в том, что мой pdf размещен в IFrame.

Вот такие интересные подсказки я нашел: Если я возвращаю Word.doc обратно, он загружается только один раз, если PDF загружается дважды. Кроме того, я видел разное поведение на разных клиентских компьютерах. Я думаю, что версия Adobe может иметь к этому какое-то отношение.

Обновление:

В моем случае я устанавливал HttpCacheability в NoCache. При проверке этого любой из параметров кэша, не относящихся к клиенту, приведет к двойной загрузке файла PDF. Только если не установить его вообще (по умолчанию значение «Личное») или явно указать его как «Личное» или «Публичное», это решит проблему, все остальные параметры дублируют двойную загрузку документа.

0 голосов
/ 29 января 2009

Вы пробовали это в Page_Load? и почему GetDocument является статическим методом?

0 голосов
/ 19 января 2009

Quick Guess: Может быть, на этом этапе жизненного цикла страницы класс, содержащий GetDocument (), уже прошел сборку мусора? Затем процессу ASP.NET Worker необходимо перезагрузить страницу, чтобы снова прочитать этот метод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...