2010-02-02 11 views
2

Мы запускаем Crystal Reports на Windows Server 2008 с .NET framework 3.5 SP1.Ошибка прерывистого отчета Crystal Reports «Запрос не может быть отправлен для обработки фона».

Я видел много причин общей ошибки «Запрос не может быть отправлен для обработки фона». на других форумах, однако они имеют тенденцию быть постоянными и повторяемыми, затрагивая только один отчет из-за конкретной проблемы форматирования с конкретным отчетом.
Мы видим эту ошибку с последующей трассировкой стека, с перерывами.

  • Это влияет на несколько разных отчетов, которые у нас есть.
  • Он влияет на один конкретный отчет чаще, чем на другие отчеты.
  • После того, как отчет затронут, такая же ошибка часто появляется в нескольких отчетах примерно в одно и то же время, например. в течение следующих 10 минут.
  • Тот же отчет, запускаемый с одними и теми же параметрами, может работать при повторном запуске (вскоре после этого), или приложение может потребоваться перезагрузка, прежде чем отчет может быть успешно запущен.

Эти отчеты все работали ранее без проблем. Никакие изменения в сервере или коде не кажутся очевидными, что ускорило бы эту ошибку. Весь код для этого - VB.NET

Нам было трудно воспроизвести его в тестовых средах, и обновление до последней версии Crystal не помогло вообще. Любая помощь или предложения, которые вы могли бы решить для решения этой проблемы, будут оценены.


"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" 
+0

Вы когда-нибудь встречались с этим? У нас такая же проблема. –

ответ

1

Изолировать код генерации отчета.

Наша окончательная резолюция заключалась в том, чтобы взять код, который генерировал отчет, и переместить его в свою изолированную службу. Наш оригинальный сервис затем вызывает нашу новую службу Crystal с соответствующими параметрами и файлом Crystal RPT. Это, очевидно, дорогостоящее решение, поскольку оно включает в себя изменение всего кода генерации отчетов, чтобы вместо этого вызвать службу Crystal. Служба Crystal не обнаруживает ошибку. Кроме того, код не изменился, поэтому мы можем только предположить, что причиной ошибки было некоторое взаимодействие механизма отчетов Crystal и среды в нашем приложении.

0

Есть ли шанс, что объект отчета просочились в памяти сервера? Я столкнулся с аналогичным случаем, когда объект отчета хранился в объекте Session, поэтому отчет не нуждался в перезагрузке, поскольку пользователь перемещался между страницами. Однако, когда пользователь выполнил отчет, объект остался в сеансе и не был очищен должным образом, когда сеанс был уничтожен сервером. Мне пришлось добавить немного кода в событие Session_End в global.asax, чтобы найти объект отчета и вызвать метод dispose на нем.

Тот факт, что это появляется с перерывами, но затем затрагивает все отчеты в течение 10 минут, заставляет меня думать, что это может быть связано с сеансом. В моей ситуации сервер достиг предела в количестве отчетов, которые могут быть созданы на сервере (в памяти), потому что они не были выпущены. Симптомы были похожи на ваши.

Надеюсь, это поможет!

+0

Использование объекта отчета завернуто в блок Try finally, который закрывает и удаляет объект в блоке finally. Это справедливо для всех наших применений хрустальных отчетов. Я рассмотрю что-то связанное с сеансом, потому что это будет иметь смысл с учетом симптомов. Благодарю. – Robert

0

Попробуйте следующее: если вы оставили пустое пространство в отчете кристалла (верхний колонтитул, нижний колонтитул или любые разделы), подавите его. это все. У меня была эта проблема, и я исправил этот путь.

3

После многих дней, наконец, я обнаружил, что является корнем проблемы, если вы включаете jpg изображения в свой отчет.

Дело в том, что CR для VS2008 или более поздних версий, не может обрабатывать файлы jpg в режиме CMYK. CR может обрабатывать только файлы jpg в режиме RGB.

Смешно, что более низкие версии CR (тот, который поставляется с VS2003) может обрабатывать любые файлы jpg. Спасибо, Кристалл.

1

Для меня проблема заключалась в предоставлении временного отчета Crystal Crystal, который генерируется в папке TEMP в Windows. Существует ограничение на количество временных отчетов Crystal Reports, которые могут быть сгенерированы механизмом Crystal report при обработке в цикле. Либо пространство в папке Temp заканчивается из-за низкой памяти на диске C, либо достигается предел отчетов, после чего в одном отчете о кристалле не может экспортироваться дальше. Это даст ошибку, о которой идет речь.

Для меня этот вопрос был повторяющимися каждые 500 докладов, которые были обработаны (я генерируя отчеты говорят, за год и экспортировать их в системную папку по одному, используя мое приложение)

Решение простое , Всегда закрывайте и удаляйте временный файл .rpt Crystal Report после его экспорта.

 


    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