Erro intermitente do Crystal Reports “A solicitação não pôde ser enviada para processamento em segundo plano.”

StackOverflow https://stackoverflow.com/questions/2181255

Pergunta

Estamos executando o Crystal Reports em um Windows Server 2008 com .NET framework 3.5 SP1.

Eu já vi muitas causas do erro geral "a solicitação não pôde ser enviada para processamento em segundo plano". Em outros fóruns, no entanto, eles tendem a ser persistentes e repetíveis, afetando apenas um único relatório devido a um problema de formatação específico com um relatório específico.
Estamos vendo esse erro com o rastreamento de pilha abaixo, de forma intermitente.

  • Afeta vários relatórios diferentes que temos.
  • Afeta um relatório específico com mais frequência do que outros relatórios.
  • Depois que um relatório é afetado, o mesmo erro geralmente aparece em vários relatórios aproximadamente ao mesmo tempo, por exemplo.pelos próximos 10 minutos.
  • O mesmo relatório executado com os mesmos parâmetros pode funcionar quando executado novamente (logo depois) ou o aplicativo pode precisar ser reiniciado antes que o relatório possa ser executado novamente com êxito.

Todos esses relatórios funcionaram anteriormente sem problemas.Nenhuma alteração no servidor ou no código parece aparente, o que teria precipitado esse erro.Todo o código por trás disso é VB.NET

Tivemos dificuldade em reproduzi-lo em ambientes de teste e atualizar para a versão mais recente do Crystal não ajudou em nada.Qualquer ajuda ou sugestão que você possa fazer para resolver esse problema será apreciada.


"The request could not be submitted for background processing."  
  at CrystalDecisions.ReportAppServer.Controllers.DatabaseControllerClass.ReplaceConnection(Object oldConnection, Object newConnection, Object parameterFields, Object crDBOptionUseDefault)  
  at CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(Object val, Type type)  
  at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)  
--- End of inner exception stack trace ---  
  at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)  
  at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)  
  at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)  
  at "USER CODE"
Foi útil?

Solução 3

Isole o código de geração do relatório.

Nossa resolução final foi pegar o código que estava gerando o relatório e movê -lo para seu próprio serviço isolado. Nosso serviço original chama nosso novo serviço de cristal com os parâmetros relevantes e o arquivo RPT de cristal. Obviamente, essa é uma solução cara, pois envolve a modificação de todo o código de geração de relatórios para chamar o serviço de cristal. O serviço de cristal não exibe o erro. O código não havia alterado além disso, portanto, só podemos presumir que a causa do erro foi uma interação do mecanismo de Crystal Reports e do ambiente em nosso aplicativo.

Outras dicas

Depois de muitos dias, finalmente descobri qual é a raiz do problema, caso você esteja incluindo Imagens JPG em seu relatório.

O problema é que CR para versões VS2008 ou posteriores, Não é possível lidar com arquivos JPG no modo CMYK. Somente CR pode lidar com arquivos JPG no modo RGB.

É engraçado que as versões mais baixas do CR (a que vieram com o VS2003) possam lidar com qualquer tipo de arquivos JPG. Obrigado, cristal.

Para mim, o problema estava no Crystal Report temporário que é gerado na pasta TEMP do Windows.Há um limite para o número de Crystal Reports temporários que podem ser gerados pelo mecanismo de relatório Crystal durante o processamento em um loop.O espaço na pasta Temp acaba devido à falta de memória na unidade C ou o limite de relatórios é atingido, após o qual o Crystal Report não pode ser exportado em uma única execução.Dará o erro mencionado em questão.

Para mim, esse problema era recorrente a cada 500 relatórios processados ​​(eu estava gerando os relatórios, digamos, por um ano e exportando-os para uma pasta do sistema, um por um, usando meu aplicativo)

A solução é simples. Sempre feche e descarte o arquivo temporário .rpt do Crystal Report após exportá-lo .



    for i as integer=0 to reportcount -1
        Dim rpt as New MyCrystalReport
        Dim filename as String = "MyReport" & i & ".Pdf"
        //Query the DB obtain the dataset then set the datasource to the report
        ...
        //Export the report
       rpt.ExportToDiskCrystalDecisions.Shared.ExportFormatType.PortableDocFormat,fileName)
        rpt.Close()
        rpt.Dispose()
    next


Existe uma chance de o objeto de relatório vazar na memória do servidor? Eu encontrei um caso semelhante em que o objeto de relatório estava sendo armazenado em um objeto de sessão, para que o relatório não precisasse ser recarregado enquanto o usuário navegava entre as páginas. No entanto, quando o usuário foi feito com o relatório, o objeto permaneceu na sessão e não foi limpo corretamente quando a sessão foi destruída pelo servidor. Eu tive que adicionar um pouco de código no evento session_end no global.asax para encontrar o objeto de relatório e chamar o método de disposição nele.

O fato de isso aparecer intermitentemente, mas afeta todos os relatórios por uma questão de 10 minutos, me faz pensar que poderia estar relacionado à sessão. Na minha situação, o servidor atingiu um limite do número de relatórios que poderiam ser criados no servidor (na memória) porque não estavam sendo lançados. Os sintomas eram semelhantes aos seus.

Espero que isto ajude!

Experimente o seguinte: se você deixou algum espaço em branco no Crystal Report (cabeçalho, rodapé ou qualquer seção), reprime -o. isso é tudo. Eu tive esse problema e corrigi dessa maneira.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top