Sto trasmettendo un PDF al browser in ASP.NET 2.0. Funziona su tutti i browser su HTTP e su tutti i browser eccetto IE su HTTPS. Per quanto ne so, questo funzionava (negli ultimi 5 anni circa) in tutte le versioni di IE, ma solo di recente i nostri clienti hanno iniziato a segnalare problemi. Sospetto che il non salvi le pagine crittografate sull'opzione di sicurezza del disco utilizzata per impostazione predefinita e che a un certo punto sia stata abilitata per impostazione predefinita (Opzioni Internet -> Avanzate -> Sicurezza). Disattivare questa opzione aiuta, come soluzione, ma non è fattibile come soluzione a lungo termine.Generazione di PDF, errore con IE e HTTPS
Il messaggio di errore che sto ricevendo è:
Internet Explorer non può scaricare OutputReport.aspx da www.sitename.com.
Internet Explorer non è stato in grado di aprire questo sito Internet. Il sito richiesto non è disponibile o non può essere trovato. Per favore riprova più tardi.
Lo strumento utilizzato per creare il PDF è ActiveReports da DataDynamics. Una volta creato il PDF, ecco il codice di inviare verso il basso:
Response.ClearContent()
Response.ClearHeaders()
Response.AddHeader("cache-control", "max-age=1")
Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment; filename=statement.pdf")
Response.AddHeader("content-length", mem_stream.Length.ToString)
Response.BinaryWrite(mem_stream.ToArray())
Response.Flush()
Response.End()
Nota: Se non specifica esplicitamente di controllo della cache quindi .NET manda no-cache a nome mio, così ho provato a fissare controllo della cache su: privato o pubblico o maxage = #, ma nessuno di questi sembra funzionare.
Ecco la svolta: quando eseguo Fiddler per ispezionare le intestazioni di risposta, tutto funziona correttamente. Le intestazioni che ricevo sono:
HTTP/1.1 200 OK
Cache-Control: max-age = 1
Data: Mercoledì 29 Lug 2009 17:57:58 GMT
Content-Type: application/pdf
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-aspnet-Versione: 2.0.50727
Content-disposition: attachment; filename = statement.pdf
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Non appena mi volto Fiddler fuori e provare di nuovo, non riesce ancora una volta. Un'altra cosa che ho notato è che quando Fiddler è in esecuzione ottengo un C'è un problema con il certificato di sicurezza di questo sito Web messaggio di avviso, e devo fare clic su Continuare su questo sito (non consigliato) per passare. Quando Fiddler è disattivato, non vedo questo avviso di sicurezza e fallisce subito.
Sono curioso di ciò che sta accadendo tra Fiddler e il browser in modo che funzioni quando Fiddler è in esecuzione ma si interrompe quando non lo è, ma ancora più importante qualcuno ha idee su come posso cambiare il mio codice in modo da far scorrere i PDF in IE funziona senza apportare modifiche alla macchina client?
Aggiornamento: I problemi di Fiddler sono stati risolti, grazie mille EricLaw, quindi ora si comporta in modo coerente (interrotto, con o senza Fiddler in esecuzione).
Sulla base della ricerca di Google, sembra che ci siano molte segnalazioni di questo stesso problema su tutto il web, ciascuna con la propria combinazione specifica di intestazioni di risposta che sembrano risolvere il problema per i singoli casi. Ho provato molti di questi suggerimenti, tra cui l'aggiunta di un ETag, la data LastModified, la rimozione dell'intestazione di Vary (usando Fiddler) e dozzine di combinazioni degli header di Cache-Control e/o di Pragma. Ho provato "Content-Transfer-Encoding: binary" e "application/force-download" per ContentType. Niente ha aiutato finora. Ci sono un KBarticles , tutti che indicano che Cache-Control: no-cache è il colpevole. Altre idee?
Aggiornamento: A proposito, per completezza, questo stesso problema si verifica anche con le uscite Excel e Word.
Aggiornamento: Nessun progresso è stato effettuato. Ho mandato via email il file .SAZ da Fiddler a EricLaw e lui è riuscito a riprodurre il problema durante il debug di IE, ma non ci sono ancora soluzioni. Bounty sta per scadere ...
IE6, IE7 e IE8 sono tutti interessati. – wweicker