none
No se puede evaluar la expresión porque el código está optimizado o existe un marco nativo en la parte superior de la pila de llamadas.

    Question

  • Buen día.

    Estoy tratando de descargar un archivo, pero sale la siguiente excepción:

    No se puede evaluar la expresión porque el código está optimizado o existe un marco nativo en la parte superior de la pila de llamadas.

    El código es el siguiente:

    Response.Clear();        
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}.xlsx", "Archivo")); 
            Response.WriteFile(rutaArchivo);
            Response.Flush();
            Response.End();

    La excepción es lanzada en la línea  Response.End();

    Traté de solucionar el problema con las recomendaciones planteadas en el siguiente link:

    http://social.msdn.microsoft.com/Forums/es/netfxwebes/thread/0fa1e745-276a-4c39-91a8-c5c3d19ea8b4

    Pero hasta el momento nada ha funcionado.

    Muchas gracias por la ayuda que puedan ofrecerme.

    Monday, July 30, 2012 3:07 PM

All replies

  • pregunta, como invocas esta accion de descarga, quizas usas un Response.Redirect() ?

    si es asi recuerda asignar el false

    Response.Redirect("pagina.aspx", false)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Monday, July 30, 2012 3:17 PM
  • No uso Response.Redirect() 
    Monday, July 30, 2012 3:23 PM
  • yo tengo el mismo problema que tu mi pana, y le he movido por todos lados y nada, lograste resolver??

    saludos

    • Edited by julioz Wednesday, September 26, 2012 12:13 AM
    Wednesday, September 26, 2012 12:12 AM
  • Intentaste cambiar el:

    Response.End(); 

    Por este:

    Response.Close();


    Saludos.

    Thursday, December 27, 2012 5:51 PM
  • es que usando una unica pagina no se puede resolver

    debes realizar las acciones en diferentes paginas, lanzar un popup para que se realice el

    Response.WriteFile(rutaArchivo);

    y en la pagina principal si podrias realizar el redirect

    pero en la misma pagina no se puede el respknse es uno solo y no puede tomar ambas acciones

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Thursday, December 27, 2012 6:51 PM
  • Hola:

    No se si lo resolviste... 

    Yo al final después de varios días lo conseguí.

    Como dice Leandro, hay que hacerlo en distintas páginas.

    Entonces en la página donde tengo el LinkButton, añado el evento click y hago un redirect a una página que la nombro download.aspx

    protected void LinkButton1_Click(object sender, EventArgs e)        
    {            
         Session["GUID"] = ((System.Web.UI.WebControls.LinkButton)(sender)).CommandArgument;
         Session["DOC"] = (sender as LinkButton).Text.ToString();
         Response.Redirect("download.aspx", false);
    }

    Y luego en el OnLoad de la página download.aspx ya pongo todo el código que vi en la página de microsoft

    protected void Page_Load(object sender, EventArgs e)
            {
                AccesoIP.SRProyectos.ProyectoServiceClient client = new AccesoIP.SRProyectos.ProyectoServiceClient();
                string GUID;
                string nombrearchivo;
                Byte[] archivo;
    
                GUID = Session["GUID"].ToString();
    
                System.IO.Stream iStream = null;
                archivo = client.DescargarDocumento(GUID, 1);
                        nombrearchivo = client.NombreDocumento(GUID, 1);
    
                try
                {
                    long dataToRead;
    
                    // Longitud del archivo: 
                    int length;
    
                    byte[] buffer = new Byte[1000];
                    iStream = new System.IO.MemoryStream(archivo);
                    //for (int i = 0; i < archivo.Length; i++)
                    //    iStream.WriteByte(archivo[0]);
    
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + nombrearchivo);
                    dataToRead = iStream.Length;
    
                    Response.Clear();
    
                    while (dataToRead > 0)
                    { // Comprobar que el cliente está conectado. 
                        if (HttpContext.Current.Response.IsClientConnected)
                        {
                            // Read the data in buffer. 
                            length = iStream.Read(buffer, 0, 1000);
    
    
                            // Escribir los datos en la secuencia de salida actual. 
                            HttpContext.Current.Response.OutputStream.Write(buffer, 0, length);
    
                            // Vaciar los datos en la salida HTML. 
                            HttpContext.Current.Response.Flush();
    
                            buffer = new Byte[1000]; dataToRead = dataToRead - length;
                        }
                        else
                        { //impedir un bucle infinito si el usuario se desconecta 
                            dataToRead = -1;
                        }
                    }
                    if (iStream != null)
                    { //Cerrar el archivo. 
                        iStream.Close();
                        iStream.Dispose();
                        HttpContext.Current.Response.Flush();
                        HttpContext.Current.Response.Close();
                        HttpContext.Current.Response.End();
                        System.Web.HttpContext.Current.Response.Close();
                    }
                }
    
                catch (Exception ex)
                { // Capturar el error, si lo hay. 
                    Response.Write("Error : " + ex.Message);
                }
                finally
                {
    
                }
            }


    Tuesday, May 28, 2013 7:46 AM