Tip: Exportacion hacia Excel bajo SSL

Estuvimos realizando un trabajo de exportación de datos hacia Excel, todo iba de mi maravillas era el típico modo de exportación que se maneja de la siguiente manera:



response.Clear();
response.Buffer = true;
//Tipo Excel
response.ContentType = «application/vnd.ms-excel«;
//Attachment para que aparesca el cuadrito de guardar como
response.AppendHeader(«content-disposition«, «attachment; filename=» + strNombreArchivo);
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
CreateStylesheet(writer, sHeaders, sFileds, FormatType);
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
//dsExportar es la data a exportar, en este caso un DataSet
XmlDataDocument xmlDoc = new XmlDataDocument(dsExportar);
XslTransform xslTran = new XslTransform();
xslTran.Load(new XmlTextReader(stream), null, null);
System.IO.StringWriter sw = new System.IO.StringWriter();
xslTran.Transform(xmlDoc, null, sw, null);
response.Write(sw.ToString());
sw.Close();
writer.Close();
stream.Close();
response.End();

El código que se muestra es estandar, no hay nada de especial, todo funcionaba de mil maravillas excepto que al hacer pruebas sobre SSL y en especial en Internet Explorer v 6.0 SP 1 (Si, la misma versión que me dió un monton de problemas para ASP.NET Ajax), simplemente el reporte no se generaba, lanzándonos el siguiente mensaje de error:


«No puede descargar …Pagina.aspx de www.website.com.


Internet Explorer no puede abrir este sitio Internet. El sitio pedido no está disponible o no se encuentra. Inténtelo de nuevo.»


Luego de investigar un poco respecto al tema nos encontramos que se debía a un bug dentro del navegador y era referente al manejo del Cache y SSL.

El manejo del cache que tenía estaba generando inconvenientes al momento de intentar descargar el archivo excel desde la zona segura, y era especialmente por una de las cabeceras agregadas: ’Pragma: no-cache’

En si la solución es muy sencilla y consiste en quitar esta cabecera al momento de realizar la exportación y luego si queremos que cada vez que se descargue un archivo sea una nueva versión del mismo podríamos usar la siguiente cabecera: «Cache-Control: max-age=0» con ello nos aseguramos de obtener la última versión de la exportación :).

Ahora en código C# quedaría algo como lo siguiente (Primero limpiamos los headers y luego agregamos la directiva antes definida):



response.Clear();
response.ClearHeaders();
response.ClearContent();
response.AddHeader(«Cache-Control«, «max-age=0«);


Ahora ya tenemos exportando correctamente la información bajo SSL y en Internet Explorer 6.0 SP 1

Espero sea de utilidad,

Ivan Mostacero.

2 comentarios sobre “Tip: Exportacion hacia Excel bajo SSL”

  1. hola ivan, me parecio curioso tu post, a mi me ocurre lo mismo cuando utilizo el visor de reportes de crystal reports (en el momento de querer exportar el reporte)en un aspx sobre ssl. Aun no se como solucionar el problema ya que el popup de exportacion es generado por el componente de crystal, tienes alguna sugerencia o workarround para este problema? Gracias por tu ayuda.

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *