Вопрос

Этот код всегда будет загружать мою страницу 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"/>

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

Это было полезно?

Решение

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

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

Обновлять:

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

Другие советы

GetDocument(doclocation);

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

Если так:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top