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