Transfiero un PDF al navegador en ASP.NET 2.0. Esto funciona en todos los navegadores a través de HTTP y todos los navegadores excepto IE a través de HTTPS. Hasta donde sé, esto solía funcionar (durante los últimos 5 años más o menos) en todas las versiones de IE, pero nuestros clientes solo recientemente han comenzado a informar problemas. Sospecho que el No guardar las páginas cifradas en el disco opción de seguridad solía estar deshabilitado de forma predeterminada y en algún momento se convirtió en habilitado por defecto (Opciones de Internet -> Avanzado -> Seguridad). Desactivar esta opción ayuda, como solución alternativa, pero no es viable como una solución a largo plazo.Generando PDF, error con IE y HTTPS
El mensaje de error que recibo es:
Internet Explorer no puede descargar desde OutputReport.aspx www.sitename.com.
Internet Explorer no pudo abrir este sitio de Internet. El sitio solicitado no está disponible o no se puede encontrar. Por favor, inténtelo de nuevo más tarde.
La herramienta utilizada para crear el PDF es ActiveReports desde DataDynamics. Una vez creado el PDF, aquí está el código para enviar hacia abajo:
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: Si no especifica explícitamente Cache-control, entonces envía .NET no-cache en mi nombre, así que he intentado fijar cache-control a: private or public o maxage = #, pero ninguno de ellos parece funcionar.
Aquí está el giro: cuando ejecuto Fiddler para inspeccionar los encabezados de respuesta, todo funciona bien. Las cabeceras que recibo son:
HTTP/1.1 200 OK
Cache-Control: max-age = 1
Fecha: Miér 29 Jul 2009 17:57:58 GMT
Content-Type: application/pdf
servidor: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
X-ASPNET-Version: 2.0.50727
Content-Disposition: attachment; archivo = statement.pdf
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: fragmentada
Tan pronto como me vuelvo violinista e intente de nuevo, vuelve a fallar. Otra cosa que noté es que cuando Fiddler se está ejecutando recibo un Hay un problema con el mensaje de advertencia del certificado de seguridad de este sitio web, y tengo que hacer clic en Continuar a este sitio web (no recomendado) para pasar. Cuando Fiddler está desactivado, no encuentro esta advertencia de seguridad y falla de inmediato.
Tengo curiosidad por saber qué está sucediendo entre Fiddler y el navegador para que funcione cuando Fiddler se está ejecutando pero se rompe cuando no lo está, pero más importante aún, ¿alguien tiene alguna idea de cómo podría cambiar mi código para transmitir PDF a IE? trabajar sin hacer cambios en la máquina del cliente?
Actualización: Los problemas del Fiddler se han resuelto, muchas gracias EricLaw, por lo que ahora se comporta de manera constante (roto, con o sin Fiddler ejecutándose).
Según la búsqueda en Google, parece que hay muchos informes de este mismo problema en la web, cada uno con su propia combinación específica de encabezados de respuesta que parecen solucionar el problema para sus casos individuales. He intentado muchas de estas sugerencias, incluida la adición de un ETag, la fecha de LastModified, la eliminación del encabezado Vary (con Fiddler) y docenas de combinaciones de los encabezados Cache-Control y/o Pragma. Intenté "Content-Transfer-Encoding: binary" así como también "application/force-download" para ContentType. Nada ha ayudado hasta ahora. Hay un fewMicrosoftKBarticles, todos los cuales indican que Cache-Control: no-cache es el culpable. ¿Alguna otra idea?
Actualización: Por cierto, para completar, este mismo problema ocurre con las salidas de Excel y Word también.
Actualización: No se ha realizado ningún progreso. Envié por correo electrónico el archivo .SAZ de Fiddler a EricLaw y pudo reproducir el problema al depurar IE, pero todavía no hay soluciones. Bounty va a caducar ...
IE6, IE7 e IE8 son todos afectados. – wweicker