Pergunta

Este código será sempre fazer o meu carregamento da página aspx duas vezes. E isso não tem nada a ver com 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();

Este código só vai fazer o meu carregamento da página uma vez (como deveria) quando eu codificar alguns valores fictícios.

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();

Eu também aumentou o comprimento pedido para uma boa medida no arquivo web.config.

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

nada ainda. Qualquer um vê algo que não fazer?

Foi útil?

Solução

Você já encontrou uma solução para isso ainda? Eu tendo o mesmo problema, o meu código é praticamente um espelho do seu. principal diferença é a minha pdf está hospedado em um IFrame.

Assim pistas interessantes que eu encontrei: Se eu transmitir de volta um Word.doc só é carregado uma vez, se pdf ele é carregado duas vezes. Além disso, eu vi um comportamento diferente de diferentes áreas de trabalho cliente. Estou a pensar que Adobe versão pode ter algo a ver com isso.

Update:

No meu caso eu estava arrumando a HttpCacheability para NoCache. Ao verificar isso, qualquer uma das opções não cache do cliente faria com que a dupla descarga do pdf. Só não defini-lo em tudo (o padrão é privada) ou explicitamente defini-lo como Privado ou Público iria corrigir o problema, todos os outros ajustes duplicado a dupla carga do documento.

Outras dicas

GetDocument(doclocation);

Pode ser este método de alguma forma retorna código de redirecionamento? ou pode ser um iframe ou img para o seu conteúdo dinâmico?

Se assim:

Em geral, o controle poderia ter chamado duas vezes por causa da resposta url. Primeiro ele processa o conteúdo. Depois que o navegador tenta baixar a fonte tag (iframe, img) que é realmente um conteúdo dinâmico que é gerado. Por isso, faz outra solicitação para o servidor web. Nesse caso, um outro objeto Página criada que tem um viewstate diferente, porque é um pedido diferente.

Guess rápido: Será que nesta fase do ciclo de vida da página, a classe que contém GetDocument () já passaram por coleta de lixo? O processo de trabalho ASP.NET, então, precisa recarregar a página, a fim de ler esse método novamente?

Você já tentou fazê-lo no Page_Load? e por que é GetDocument um método estático?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top