El informe de carga de CrystalReport falló

Tengo un proyecto de aplicación de Windows (C # y .NET 2.0) que usó Crystal Report 2008. Pero a veces me aparece un error (parece accidental) en el informe de carga. Ese error es:

CrystalDecisions.Shared.CrystalReportsException: Load report failed. System.Runtime.InteropServices.COMException (0x8000020D): Unable to load report. at CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() --- End of inner exception stack trace --- at CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() at CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) at CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) at SIA.DataTransfer.Forms.frmReport.GetStateReport(Int32 transferType) 

por favor guíame. ¿Como puedó resolver esté problema?

Si su aplicación es un ejecutable independiente, este error se genera porque no está cerrando su objeto de informe correctamente cuando termina con lo que sea que haga. Es posible que vea este error ejecutándose en su aplicación como una aplicación ASP.NET con muchos usuarios que acceden a su sitio simultáneamente.

Puede hacer que el error aparezca antes al modificar esta clave de registro:

 HKEY_LOCAL_MACHINE\SOFTWARE\CRYSTAL DECISIONS\10.0\REPORT APPLICATION SERVER\SERVER\PrintJobLimit 

Normalmente, su valor predeterminado es 75. Para la depuración, puede establecerlo en un valor más pequeño y hacer que el error aparezca antes.

Cuando haya terminado de usar un objeto de informe, llame al método .Close () que limpiará los recursos no administrados utilizados.

Hay aquellos que mencionan para cambiar la configuración a -1. Esto es un error, solo causará otros problemas para una aplicación que se está ejecutando durante mucho tiempo. Con el tiempo, el proceso se quedará sin recursos y comenzará a fallar de manera que será aún más difícil de solucionar.

Aumentar CurrentJobLimit no es la solución; este número se alcanzará si el contador no se restablece.
Para evitar que aumente el contador de trabajos, debe cerrar el Documento de informe de Crystal ( ReportSource.Close() ) mediante progtwigción.

 protected void Page_Unload(object sender, EventArgs e) { CrystalReportViewer1.ReportSource.Close(); } 

Esta es la única manera de evitar que continúe aumentando el informe abierto, que se cuenta con CurrentJobLimit

He verificado que la solución de John Dyer , arriba , no funciona en todos los casos.

También he verificado que la reinstalación de Crystal Runtime no sirvió para este error en particular.

Para mi aplicación, esto solo sucedía en las instalaciones de Citrix de un archivo .exe independiente, con informes incrustados. Antes de usar el Visor de informes de Crystal, debo asegurarme de haber borrado cualquier informe previamente cargado en el visor, según las instrucciones de John. Entonces, escribí algo (en VB) que parece

 Public Function ShowRpt(...) As Boolean .... CleanOutViewer() .... End Function 

donde CleanOutViewer es:

 Private Sub CleanOutViewer() If Not Me.CrystalReportViewer1.ReportSource() Is Nothing Then CType(Me.CrystalReportViewer1.ReportSource(), CrystalDecisions.CrystalReports.Engine.ReportDocument).Close() CType(Me.CrystalReportViewer1.ReportSource(), CrystalDecisions.CrystalReports.Engine.ReportDocument).Dispose() Me.CrystalReportViewer1.ReportSource() = Nothing GC.Collect() End If End Sub 

Las llamadas después de .Close () tampoco tuvieron efecto (y se agregaron como un bash alternativo para intentar forzar al Crystal a liberar recursos).

El documento de Crystal Report debe ser eliminado manualmente.

Debe controlar la vida útil de todos los Informes en su aplicación y llamar a su Disposición antes de alcanzar el límite de 75.

Hay un buen enfoque sobre cómo lograr esto en este enlace:

http://geekswithblogs.net/technetbytes/archive/2007/07/17/114008.aspx

Internet también sugiere volver a instalar los tiempos de ejecución de Crystal Report en las máquinas en las que está intentando abrir el informe (asegurándose de que todas las ubicaciones tengan la misma versión).

Para su información, acabo de verificar esta solución para un problema similar. El método ReportDocument.Load fallaba al usar un recurso compartido de red asignado o una ruta UNC e instalar el Crystal Report VS Runtime en el servidor de archivos solucionó el problema.