Pregunta

Este código siempre hará que mi página aspx se cargue dos veces. Y esto no tiene nada que ver con 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 solo hará que mi página se cargue una vez (como debería) cuando codifique algunos valores ficticios.

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

También he aumentado la longitud de la solicitud para una buena medida en el archivo web.config.

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

Todavía nada. ¿Alguien ve algo que yo no veo?

¿Fue útil?

Solución

¿Ya ha encontrado una solución a esto? Tengo el mismo problema, mi código es prácticamente un espejo tuyo. La principal diferencia es que mi pdf está alojado en un IFrame.

Tan interesantes pistas que he encontrado: Si vuelvo a transmitir un Word.doc solo se carga una vez, si pdf se carga dos veces. Además, he visto un comportamiento diferente de los diferentes escritorios de los clientes. Estoy pensando que la versión de Adobe puede tener algo que ver con eso.

Update:

En mi caso, estaba configurando HttpCacheability en NoCache. Al verificar esto, cualquiera de las opciones de caché que no sean del cliente causaría la doble descarga del pdf. Solo no establecerlo en absoluto (predeterminado en Privado) o establecerlo explícitamente en Privado o Público solucionaría el problema, todas las demás configuraciones duplicaron la doble carga del documento.

Otros consejos

GetDocument(doclocation);

¿Puede ser este método de alguna manera devuelve el código de redireccionamiento? o puede ser un iframe o img para tu contenido dinámico?

Si es así:

En general, el control podría ser llamado dos veces debido a la respuesta de la URL. Primero representa el contenido. Después de eso, su navegador intenta descargar la fuente de etiqueta (iframe, img) que en realidad es un contenido dinámico que se genera. Por lo tanto, realiza otra solicitud al servidor web. En ese caso, se creó otro objeto de página que tiene un estado de vista diferente, porque es una Solicitud diferente.

Adivinación rápida: ¿Podría ser que en esta etapa del ciclo de vida de la página, la clase que contiene GetDocument () ya haya pasado por la recolección de basura? ¿Entonces el proceso de trabajo de ASP.NET necesita volver a cargar la página para volver a leer ese método?

¿Lo has probado en Page_Load? ¿Y por qué GetDocument es un método estático?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top