C # escrito para o fluxo de saída
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?
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?