Usuário com melhor resposta
Crystal Reports - erro ao abrir relatório (.net Runtime 2.0 Error reporting)

Pergunta
-
Estou com ploblema para criar um relatório. Quando eu coloco .Dispose() e .Close(), esta travando o IIS, quando verifico a mensagem de erro no log aparece a seguinte mensagem:
- error .net Runtime 2.0 Error reporting
- error Aplication error.
Sem o Dispose e o Close o erro não aparece, mas após gerar alguns relatórios aparece um erro De falha de carregamento do relatório.
Segue o código:
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections;
using CrystalDecisions.ReportSource;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
public class Reports
{
public ReportDocument ExecCrystal(string vFile, Hashtable rptParams)
{
int num;
ReportDocument document = new ReportDocument();
document.Load(vFile);
foreach (string str in rptParams.Keys)
{
foreach (ParameterField field in document.ParameterFields)
{
if (field.Name == str)
{
object obj2;
new ParameterDiscreteValue().Value = obj2 = rptParams[str];
field.CurrentValues.AddValue(obj2);
}
}
}
string user = "";
string password = "";
string server = "";
Hashtable hashtable = new Hashtable();
user = "XXXX";
password = "123";
server = "XXXX";
for (num = 0; num < document.DataSourceConnections.Count; num++)
{
document.DataSourceConnections[num].SetConnection(server, "", user, password);
}
for (num = 0; num < document.Subreports.Count; num++)
{
for (int i = 0; i < document.Subreports[num].DataSourceConnections.Count; i++)
{
document.Subreports[num].DataSourceConnections[i].SetConnection(server, "", user, password);
}
}
return document;
}
}
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CrystalDecisions.ReportSource;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using System.IO;
public partial class PedidoVenda_PreviewPDV : System.Web.UI.Page
{
ReportDocument rptPreview = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
try
{
var rpt = new Reports();
rptPreview.Close();
rptPreview.Dispose();
string vFile = Server.MapPath(@"~\PedidoVenda\Formatos\MGWEB\ia_ven_gus_pv_20122010_new.rpt");
Hashtable rptParams = new Hashtable();
rptParams.Add("PED_IN_CODIGO", Request.QueryString["ped_in_sequencia"].ToString());
rptParams.Add("pImprimeDesc", "S");
rptPreview = rpt.ExecCrystal(vFile, rptParams);
MemoryStream oStream = (MemoryStream)rptPreview.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.BinaryWrite(oStream.ToArray());
Response.End();
}
catch (Exception ex)
{
lbStatus.Text = ex.Message;
}
}
protected void Page_UnLoad(object sender, EventArgs e)
{
rptPreview.Close();
rptPreview.Dispose();
GC.Collect();
}
}
- Movido AndreAlvesLimaModerator quarta-feira, 24 de agosto de 2011 00:18 (De:.NET Development - Geral)
Respostas
-
Olá Douglas,
Pesquisei e achei algumas possíveis soluções:
1 - De permissão na pasta "c:\windows\temp" para o usuário que está executando a sua web application.
2 - Remova todos os Disposes(), Close() e GC.Collect() da sua página, exceto aqueles que estão no evento Form_UnLoad
Referência:
http://aspadvice.com/blogs/rjdudley/archive/2005/05/18/2591.aspx
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique- Marcado como Resposta Douglas Trindade terça-feira, 23 de agosto de 2011 13:26
Todas as Respostas
-
Olá Douglas,
Pesquisei e achei algumas possíveis soluções:
1 - De permissão na pasta "c:\windows\temp" para o usuário que está executando a sua web application.
2 - Remova todos os Disposes(), Close() e GC.Collect() da sua página, exceto aqueles que estão no evento Form_UnLoad
Referência:
http://aspadvice.com/blogs/rjdudley/archive/2005/05/18/2591.aspx
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique- Marcado como Resposta Douglas Trindade terça-feira, 23 de agosto de 2011 13:26
-
Olá Fernando,
Já tentei retirar todos os Disposes(), Close() e GC.Collect() deixando somente os que estão no evento Page_UnLoad, mas o erro persiste.
Este erro não ocorre toda hora, ele é aleatório, os usuários conseguem emitir o relatório, mas o erro aparece após algumas emissões, e as vezes trava o processo w3wp.exe, e com isso a página fica fora do ar.
Realizei um teste retirando Disposes(), Close() e GC.Collect() também do evento Page_UnLoad, com isso não tive mais esse problema, mas em compensação a memória do servido esta estourando.
-
Douglas,
Reclicle o Application Pool.
Continue executando outras páginas da aplicação, e veja se não é outra funcionalidade.
Outro detalhe que reparei, depois do Response.End(), faça um oStream.Dispose().
Os dados estão ficando em memória.
Vamos ver oq acontece.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique -
Fernando,
Criei um novo Application Pool para realizar uma simulação no ambiente de teste, todas as funções do site estão funcionando normalmente, o problema só começa acontecer quando começo abrir os relatórios.
Código:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CrystalDecisions.ReportSource;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using System.IO;
public partial class PedidoVenda_PreviewPDV : System.Web.UI.Page
{
ReportDocument rptPreview = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
try
{
var pdv = new PedidoVenda();
string validador = pdv.GetValidaRepPed(Request.QueryString["ped_in_sequencia"].ToString(), Session["usuarioMega"].ToString());
var rpt = new Reports();
string vFile = Server.MapPath(@"~\PedidoVenda\Formatos\MGWEB\ia_ven_gus_pv_20122010_new.rpt");
Hashtable rptParams = new Hashtable();
rptParams.Add("PED_IN_CODIGO", Request.QueryString["ped_in_sequencia"].ToString());
rptParams.Add("pImprimeDesc", "S");
rptPreview = rpt.ExecCrystal(vFile, rptParams);
MemoryStream oStream = (MemoryStream)rptPreview.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.BinaryWrite(oStream.ToArray());
Response.End();
oStream.Close();
oStream.Dispose();
}
catch (Exception ex)
{
lbStatus.Text = ex.Message;
}
}
protected void Page_UnLoad(object sender, EventArgs e)
{
if (rptPreview != null)
{
rptPreview.Close();
rptPreview.Dispose();
GC.Collect();
}
}
}
Em menos de 5 minutos deus duas vezes o erro abaixo (Quando retiro do código o evento Page_UnLoad, esse erro não acontece ):
Event Viewer
Event Type: Error
Event Source: .NET Runtime 2.0 Error Reporting
Event Category: None
Event ID: 1000
Date: 23/08/2011
Time: 12:41:52
User: N/A
Description:
Faulting application w3wp.exe, version 6.0.3790.3959, stamp 45d6968e, faulting module mscorwks.dll, version 2.0.50727.3620, stamp 4d352dce, debug? 0, fault address 0x0006be3a.
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
-
-
Olá Douglas,
Achei alguns links...
1) Reinstale o .Net Framework
http://forum.umbraco.org/yaf_postst5770_NET-Runtime-version-20507271433--Fatal-Execution-Engine-Error-79FFEE24-80131506.aspx
2) Reinstale o .Net Framework
http://www.sentryfile.com/forum/messageview.cfm?catid=33&threadid=3096
O cenário é meio ruim... cuidado quando reinstalar o .Net Framework...
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique