2012-03-06 44 views
10

Tengo un problema muy problemático, en la aplicación ASP.NET después de ver el mismo informe varias veces al mismo tiempo Obtuve esta excepción:Excepción de Crystal Reports: se ha alcanzado el límite máximo de trabajos de procesamiento de informes configurado por el administrador del sistema

The maximum report processing jobs limit configured by your system administrator has been reached.

Espere, sé que hay un montón de soluciones, pero todas ellas no funcionan conmigo.

  1. Pongo ReportDocument.Close(); ReportDocument.Dispose(); en CrystalReportViewer_Unload event, y todavía arrojar la excepción.

    Private Sub CrystalReportViewer1_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles CrystalReportViewer1.Unload reportFile.Close() reportFile.Dispose() GC.Collect() End Sub

  2. que editar el registro PrintJobLimit en HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Report Application Server\InprocServer y HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Report Application Server\Server a -1 hasta 9999, y todavía emitir la excepción.

Aquí es donde el fragmento de código que llamo mi informe:

Table_Infos = New TableLogOnInfos() 
       Table_Info = New TableLogOnInfo() 
       Con_Info = New ConnectionInfo() 

       With Con_Info 
        .ServerName = ConfigurationManager.AppSettings("server_name") 
        .DatabaseName = ConfigurationManager.AppSettings("DB") 
        .UserID = user_name 
        .Password = pass_word 
        .Type = ConnectionInfoType.SQL 
        .IntegratedSecurity = False 
       End With 

       Table_Info.ConnectionInfo = Con_Info 

       If Session("recpt_lang") = "Arabic" Then 
        reportFile.Load(Server.MapPath("/Reports/") & "collectrecpt_new_ar.rpt") 
       ElseIf Session("recpt_lang") = "English" Then 
        reportFile.Load(Server.MapPath("/Reports/") & "collectrecpt_new.rpt") 
       End If 

       For Each mytable In reportFile.Database.Tables 

        mytable.ApplyLogOnInfo(Table_Info) 

       Next 

       CrystalReportViewer1.ReportSource = reportFile 
       CrystalReportViewer1.SelectionFormula = Session("SelectionForumla") 
       CrystalReportViewer1 = Nothing 

Respuesta

8

recomendaría moviendo el cierre/disponer de código/gc.collect fuera de ese proceso de descarga. En otras palabras:

  1. Cargar
  2. Asignar a Visor de control
  3. Mostrar informe de control Visor
  4. Cerrar Visor de control y de descarga (completa)
  5. A continuación, cierre/eliminarlo/gc.collect fuera de cualquier código de control de visor

Supongo que el control del visor no se cierra por completo cuando se limpia el informe.

El cristal es un proceso muy intensivo en memoria y muy meticuloso.

+0

También estoy tratando de hacer lo mismo pero utilizando ... eso muestra la excepción de tipo de referencia de objeto, así que tengo que usar el método de descarga que no se ve bien. –

11

Después de todo, debe deshacerse de su instancia de informe. Si desecha el informe después de mostrarlo, nunca verá el error "El límite máximo de trabajos de procesamiento de informes configurado por el administrador del sistema ha sido alcanzado" nuevamente.

Dim report1 As rptBill = clsBill.GetReport(billNumber) 

    rpt.Print() 

    'Cleanup the report after that! 
    rpt.Close() 
    rpt.Dispose() 
0

Asegúrese de estar utilizando el modelo PUSH para visualizar sus informes. Lo siguiente que tiene que hacer un cambio en el registro de su servidor: Sigue el camino:

"HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Report Application Server\InprocServer" 

y verá un elemento "PrintJobLimit" y verá que su valor por defecto es 75. que significa que el servidor sólo puede manejar 75 informes a la vez. No se preocupe por eso y simplemente modificar el valor a -1

+0

Por favor, @Mansoor verifique mi pregunta. Escribí que ya lo hice. –

+0

Básicamente, hace que los trabajos de impresión sean ilimitados. esta es una muy mala práctica. Bien podría decirles que reinicien IIS cada vez que suceda y estarán bien. – oppassum

2

saludos soy demasiado tarde para tener respuesta en él, toda respuesta están trabajando y que he visto, pero en caso de que todavía se enfrentan a mismo problema y error, por favor, una vez ingrese a la carpeta TEMP bajo el directorio "windows" y elimine todas las instancias de Crystal Reports. Lo digo porque todas las opciones anteriores funcionarán pero aún está en el alcance máximo, entonces primero elimine todas las instancias y luego aplique todas las sugerencias anteriores. gracias

1

Estaba trabajando en el servidor de informes local. He alojado mi aplicación web en otra pc. Cuando recibí tal error acabo de hacer IISRESET y funciona bien ahora.

Prueba esto, esto podría ayudarte.

+0

¿Quién ha votado negativamente? Dé la razón – pedram

2

El documento de informe de Crystal implementa la interfaz IDisposable. Entonces, todo lo que tiene que hacer es encerrar la instancia del informe con la declaración using. Se cerrará automáticamente y se eliminará una vez que se complete la declaración using. Usted puede escribir algo así:

using(var report = GetInvoiceReport()) 
{ 
    // your logic here 
} 

o (depende de su contexto):

using(var report = new ReportDocument()) 
{ 
    // your logic here 
} 
-1

Terminé usando GC.WaitForPendingFinalizers además de la GC.Collect, cierre y deseche. Creo que mi página web fue quizá descarga y detener el procesamiento de hilo antes de tiempo antes de que la basura se procesó correctamente

Este es el Server 2012, SQL 2012, CR 13.0.2000.0

Aquí está mi código (en realidad?):

#Region "Cleanup" 

Private Sub crCleanup(Optional blnForce As Boolean = False) 
    Try 
     ' Crystal(code Is Not managed, i.e.it) 's COM interop => you have to manually 
     ' release any objects instantiated. Make sure you set the ref to nothing and 
     ' also call the dispose method if it has one. 

     ' under some conditions, we don't want to destroy the ReportDocument (e.g. report page-to-page navigation) 
     If blnForce OrElse Me.blnPageHasFatalError OrElse (Not Me.CrystalUseCache) Then ' do not release when using cache! (unless forced) 
      If Not crReportDocument Is Nothing Then Me.crReportDocument.Close() 
      If Not crReportDocument Is Nothing Then Me.crReportDocument.Dispose() 
      If Not thisWebAppUser Is Nothing Then Me.thisWebAppUser.Dispose() 
      Me.thisWebAppUser.ClearReportCache() ' we are using HttpContext.Current.Cache.Item instead of sessions to save CR document 
     End If 

     ' the rest of the items, we'll always want to clean up 
     If Not crParameterFieldDefinitions Is Nothing Then crParameterFieldDefinitions.Dispose() 
     If Not crParameterFieldDefinition Is Nothing Then crParameterFieldDefinition.Dispose() 

     crParameterFields = Nothing 
     crParameterField = Nothing 
     crParameterFieldName = Nothing 
     crParameterValues = Nothing 
     crParameterDiscreteValue = Nothing 
     crParameterDefaultValue = Nothing 
     crParameterRangeValue = Nothing 

     ' 
     If Not crSections Is Nothing Then crSections.Dispose() 
     If Not crSection Is Nothing Then crSection.Dispose() 
     If Not crReportObjects Is Nothing Then crReportObjects.Dispose() 
     If Not crReportObject Is Nothing Then crReportObject.Dispose() 
     If Not crSubreportObject Is Nothing Then crSubreportObject.Dispose() 
     If Not crDatabase Is Nothing Then crDatabase.Dispose() 
     If Not crTables Is Nothing Then crTables.Dispose() 
     If Not crTable Is Nothing Then crTable.Dispose() 
     crLogOnInfo = Nothing 
     crConnInfo = Nothing 

     crDiskFileDestinationOptions = Nothing 
     ConnParam = Nothing 

     If Not subRepDoc Is Nothing Then subRepDoc.Dispose() 
    Catch ex As Exception 
     Me.thisWebAppUser.SendSysAdminMessage("Failed CR cleanup", ex.ToString) 
    End Try 


    ' yes, use of the GC.Collect (and even more the GC.WaitForPendingFinalizers) is highly controversial 
    ' 
    ' the reality is that rendering crystal reports is rather slow compared to most web operations 
    ' so it is expected that waiting for GC will have relatively little performance impact 
    ' and will in fact, help tremendously with memory management. 
    ' 
    ' try setting these values to 1 and confirm for yourself by instantiating multiple crDocuments in different browsers if you don't believe it: 
    ' 
    ' HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Report Application Server\InprocServer 
    ' HKEY_LOCAL_MACHINE\SOFTWARE\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Report Application Server\Server 
    ' 
    ' or google this error: The maximum report processing jobs limit configured by your system administrator has been reached 
    ' 
    ' I believe the problem is that on very fast servers, the page unloads and stops processing code to properly cleanup the Crystal Report objects 
    ' 
    ' This is done in 3 places: 
    ' Report Viewer (Page_Unload and CrystalReportViewer1_Unload) rendering a report will of course always using a processing job 
    ' Report Parameter Selector (Page_Unload) loading a crDocument without rendering a report still counts towards CR processing job limit. 
    ' Custom Control crReportParameterSelectionTable (Public Overrides Sub dispose()) 

    GC.Collect() 
    GC.WaitForPendingFinalizers() 

End Sub 
'*********************************************************************************************************************************** 
' 
'*********************************************************************************************************************************** 
Private Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Unload 
    'If Me.IsCallback Then Exit Sub ' the menutree causes callbacks, but we are not interested 

    crCleanup() 
    ' response object not available here, so cannot redirect (such as in the case of XLS opeing in a separate window) 

    ' if for some crazy reason there is STILL a crReportDocument, set it to nothing 
    '  If Not crReportDocument Is Nothing Then Me.crReportDocument = Nothing 
    '  Me.CrystalReportViewer1 = Nothing 
End Sub 

Private Sub CrystalReportViewer1_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles CrystalReportViewer1.Unload 
    'If Me.IsCallback Then Exit Sub ' the menutree causes callbacks, but we are not interested 

    crCleanup() 
End Sub 

End Región

+0

recordatorio de que el relleno de datos en un crRoportDocument debería ocurrir en Page_Init, y no en Page_Load. Ver [https://scn.sap.com/thread/1070812](https://scn.sap.com/thread/1070812) – gojimmypi

1

Tienes que Dispose la instancia de informe después de todo. Si Dispose el informe después de mostrarla, que nunca se verá el error:

The maximum report processing jobs limit configured by your system administrator has been reached

Código:

Dim report1 As rptBill = clsBill.GetReport(billNumber) 

rpt.Print() 

'Cleanup the report after that! 
rpt.Close() 
rpt.Dispose() 
0

Asegúrese de usuario IIS tiene permisos suficientes para eliminar los archivos presentes en "c:/windows/carpeta "temp".

que se enfrentan al mismo problema una vez que proporciono permiso de escritura en esa carpeta entonces se resolvió mi issue.Also asegúrese de disponer de ese objeto después de generar el archivo

Cuestiones relacionadas