none
HttpContext.Response.Flush() = The remote host closed the connection. The error code is 0x800703E3.; RRS feed

  • Discussão Geral

  • Tenho uma aplicação que retorna uma ActionResult<o:p></o:p>

    Essa ActionResult vai me retornar um documento PDF em seu corpo que será alimentado por um array de bytes.<o:p></o:p>

    Bom, este documento deverá conter no mínimo 20 páginas, onde é feita um requisição no banco de dados para cada página retornando no array de bytes da página.<o:p></o:p>

    O que eu preciso:<o:p></o:p>

    Para cada vez que a aplicação retornasse uma página já mostraria para o cliente<o:p></o:p>

    Estou usando o seguinte código:<o:p></o:p>

     

     //retorna os dados da imagem do documento
                foreach (System.Data.DataRow r in tbpagina.Rows)
                {
                    codigolancamentopagina = int.Parse(r["codigolancamento"].ToString());
                    numerorow = int.Parse(r["numerorow"].ToString());
                    if (codigolancamentopagina > 0 & numerorow >= rowinicial & numerorow <= rowfinal)
                    {
                        mds = null;
                        mensagemerro = "";
                        mds = mws.retornadadosdaimagemgl(codigoempresa, codigolancamentopagina, anoexercicio, ref mensagemerro, 0);
                        System.Data.DataTable tbdadosimagem = mds.Tables[0];

                        string dadosimagem = tbdadosimagem.Rows[0]["dadosimagem"].ToString();

                        arraybyte = System.Convert.FromBase64String(dadosimagem);

                        arImgBytes.Add(arraybyte);

                        //convert arraylist with image streams to pdf stream
                        pdfBytes = v.ConvertImageStreamArrayToPDFStream(arImgBytes);

                         pdf = pdfBytes;
                        pdfBytes = (Byte[])pdf;

                        MemoryStream ms = new MemoryStream();
                        MemoryStream pdfStream = new MemoryStream(pdfBytes);
                        int read = pdfStream.Read(pdfBytes, 0, pdfBytes.Length);

                        if (num == 1)
                        {
                            HttpContext.Response.Buffer = true;
                            HttpContext.Response.Clear();

                            HttpContext.Response.AddHeader("content-disposition", "inline; filename=documentos.pdf");
                            HttpContext.Response.AddHeader("Content-Length", pdfBytes.Length.ToString());

                            HttpContext.Response.ContentType = "application/PDF";
                            HttpContext.Response.OutputStream.Write(pdfBytes, 0, read);
                            HttpContext.Response.Flush();   
                        }
                        else
                        {
                            HttpContext.Response.OutputStream.Write(pdfBytes, 0, read);
                            HttpContext.Response.Flush();    // Aqui está acontecendo o erro : The remote host closed the connection. The error code is 0x800703E3.                
                        }
                        num++;

                    }               
                } <o:p></o:p>

    Para cada laço do foreach, retornaria uma página para o PDF.<o:p></o:p>

    O código acima retorna a primeira página certinho para o cliente, mas quando vai passar a segunda vez dá o erro no HttpContext.Response.Flush() = The remote host closed the connection. The error code is 0x800703E3.;<o:p></o:p>

    Alguém já passou por isso.<o:p></o:p>

    Agradeço a atenção <o:p></o:p>

    Atenciosamente<o:p></o:p>

    Fábio Rocha<o:p></o:p>

    sábado, 22 de junho de 2013 15:20

Todas as Respostas

  • Você tem que descobrir uma maneira de juntar essas 20 páginas no mesmo array de bytes e enviar o mesmo uma única vez no Response.OutputStream.

    Você não vai conseguir fazer um response para cada página dentro do mesmo laço.

    Fazendo desta maneira você está tentando enviar várias páginas (responses) sem a requisição (request) correspondente para cada uma.

    Quebra totalmente a lógica de qualquer servidor web.

    terça-feira, 25 de junho de 2013 04:46
    Moderador