Domanda

Questo codice farà sempre caricare la mia pagina aspx due volte. E questo non ha nulla a che fare 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();

Questo codice caricherà la mia pagina solo una volta (come dovrebbe) quando codifico alcuni valori fittizi.

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

Ho anche aumentato la lunghezza della richiesta per una buona misura nel file web.config.

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

Ancora niente. Qualcuno vede qualcosa che io non vedo?

È stato utile?

Soluzione

Hai già trovato una soluzione? Ho lo stesso problema, il mio codice è praticamente un tuo mirror. La differenza principale è che il mio pdf è ospitato in un IFrame.

Indizi così interessanti che ho trovato: Se eseguo lo streaming indietro di Word.doc, questo viene caricato solo una volta, se pdf viene caricato due volte. Inoltre, ho visto comportamenti diversi da desktop client diversi. Sto pensando che la versione di Adobe potrebbe avere qualcosa a che fare con esso.

Aggiornamento:

Nel mio caso stavo impostando HttpCacheability su NoCache. Nel verificare ciò, una qualsiasi delle opzioni di cache non client provocherebbe il doppio download del pdf. Solo non impostarlo affatto (il valore predefinito è Privato) o impostarlo esplicitamente su Privato o Pubblico risolverebbe il problema, tutte le altre impostazioni hanno duplicato il doppio carico del documento.

Altri suggerimenti

GetDocument(doclocation);

Questo metodo può in qualche modo restituire il codice di reindirizzamento? o potrebbe essere un iframe o un img per i tuoi contenuti dinamici?

In tal caso:

In generale, il controllo potrebbe essere chiamato due volte a causa della risposta dell'URL. Per prima cosa rende il contenuto. Dopodiché il tuo browser prova a scaricare il tag (iframe, img) sorgente che in realtà è un contenuto dinamico che viene generato. Quindi effettua un'altra richiesta al server web. In tal caso è stato creato un altro oggetto pagina che ha un viewstate diverso, poiché si tratta di una richiesta diversa.

Indovina: potrebbe essere che in questa fase del ciclo di vita della pagina, la classe che contiene GetDocument () sia già passata attraverso la garbage collection? Il processo ASP.NET Worker deve quindi ricaricare la pagina per poter rileggere quel metodo?

L'hai provato in Page_Load? e perché GetDocument è un metodo statico?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top