|
|
|||||||||||||||||||||||||||||
|
Предельное количество заданий по обработке отчетов в Crystal ReportsВведение Когда веб-приложение, разработанное с использованием Crystal reports SDK для Visual Studio .NET, обрабатывает большое задание печати или большое число отчетов, может появиться следующее сообщение об ошибке: "System.Exception: Load report failed. System.Runtime.InteropServices.COMException (0x80041016): The maximum report processing jobs limit configured by your system administrator has been reached." "Системное исключение: Сбой загрузки отчета. System . Runtime . InteropServices . COMException (0 x 80041016): Достигнуто предельное количество заданий обработки отчетов, сконфигурированное Вашим системным администратором". Обычно это сообщение сопровождается ошибкой "Load Report Failed". В данной статье обсуждаются вероятные причины ошибки и возможные решения. Применимо к: Crystal Reports 10.0 до Crystal Reports 2008 (12.0.x), когда они работают в соответствующих версиях среды Visual Studio.NET. Возможные причины Сообщение об ошибке возникает потому, что веб-приложение превысило принятое по умолчанию предельное значение 75 для задания печати, принятое для механизма Crystal Reports reporting engine. Или, другими словами, процессор подготовки отчетов работал с высокой нагрузкой. Существует ряд факторов, вызывающих сбой в работе процессора отчетов от высокой нагрузки, и для каждого случая применяется отдельное решение, как показано ниже. Вопросы, связанные с программированием Корректное программирование подразумевает полный контроль над любыми объектами и соответственно их удаление, когда в них больше нет необходимости. Это справедливо для любого объекта, который поддерживает интерфейс IDisposable.
Начиная с версии Crystal Reports 10, процессор отчетов был оптимизирован с точки зрения повышения производительности обработки отчетов. Существуют специальные разделы реестра, контролирующие эту оптимизацию. По умолчанию, предельное количество заданий печати установлено равным 75. Когда приложение работает с большой нагрузкой, может быть достигнуто предельное значение заданий печати, равное 75, и это может вызвать ошибку работы приложения. Обратите внимание, что задание печати включает в себя обработку объектов главного отчета, подотчетов и объектов текущего сеанса работы (например, выполнение детализации, разбивка на страницы, осуществление поиска и т.д.). Поэтому при обработке одного отчета может быть превышено предельное значение 75 для задания печати. Рассмотрим отчет, который возвращает 75 записей, при этом подотчет помещен в раздел подробностей и, следовательно, присутствует в каждой записи. Для такого отчета потребуется обработать 75 подотчетов плюс главный отчет, в результате получим 76 заданий печати, а это вызовет появление ошибки.
Несмотря на тесную связь с причиной "Процессору отчетов передано слишком много заданий печати", существует некоторое отличие. Если слишком большое количество пользователей обратилось с запросами к процессору запросов, то последний попытается обработать большее количество заданий печати, чем то, на которое он был сконфигурирован. В качестве примера рассмотрим трех пользователей, каждый из которых сделал запрос на выдачу отчета с 25 подотчетами. Это потребует от процессора отчетов обработать 78 заданий печати; (25 подотчетов * 3 пользователя) + (3 главных отчета) в результате это вызовет появление ошибки превышения предельного количества заданий печати.
Низкопроизводительный конечный сервер с маломощным CPU достигнет предела своих возможностей быстрее, чем высокопроизводительный конечный сервер с несколькими CPU.
Приложение Crystal Reports имеет ограниченные возможности обработки. При проектировании веб-приложения с использованием Crystal Reports SDK для Visual Studio .NET учитывайте потенциальную нагрузку, с которой будет работать процессор отчетов. При высокой нагрузке следует рассмотреть возможность использования более гибких расширяемых решений, например Crystal Reports Report Application Server. Решения Решение проблемы технического ограничения количества заданий печати зависит от конкретных обстоятельств. При определенных обстоятельствах может применяться несколько возможных решений или может возникнуть необходимость в реализации комбинации решений.
Освобождение от ненужных объектов Проверьте, что вызван метод .Dispose и .Close, когда объект report больше не нужен. Кроме того, убедитесь, что эти методы вызваны не только для Crystal Reports, но и для FileStream, Database Connections, наборов данных или для любого другого объекта, который поддерживает интерфейс IDisposable. Используйте сеансы 1. Создайте подпрограмму, которая задает свойство ReportSource средства просмотра и отображает отчет в нем, и добавьте следующую строку кода. 2. В событие Page_Load добавьте следующие строки кода. Эти строки кода вызовут захват объекта report из объекта Session и зададут свойство ReportSource средства просмотра в течение postback. Теперь при запуске проекта и при перемещении по страницам отчета в средстве просмотра будет отображаться каждая страница без потери источника отчета, при этом не допускается переполнение стека и памяти и возникновение ошибки превышения предельного значения 75. Однако все равно необходимо закрыть и освободиться от ненужного объекта report. Это необходимо сделать либо при закрытии окна браузера, либо если пользователь переходит к другой странице.
Такой способ может временно приостановить возникновение ошибки, но с ростом нагрузки эта ошибка снова начнет проявляться или, что еще хуже, система может зависнуть, и единственным способом восстановления работоспособности будет перезагрузка системы. Для приложения, использующего Crystal reports SDK, раздел реестра "InprocServer" задает предельно допустимое число заданий печати, которое может обработать процессор отчетов. ПРЕДУПРЕЖДЕНИЕ: Следующее решение предполагает редактирование реестра. Некорректное использование редактора реестра может привести к серьезным проблемам, что может потребовать переустановки операционной системы Microsoft Windows. Воспользуйтесь редактором реестра на свой страх и риск. Настоятельно рекомендуется сделать резервную копию файлов реестра перед редактированием реестра. Для получения справочной информации о редактировании разделов реестра обратитесь к разделу справочной системы 'Changing Keys And Values' ("Изменение ключей и значений") в редакторе реестра (Regedit.exe). Примечание: Принятое по умолчанию значение 75 обеспечивает оптимальную производительность в протестированных средах. Изменение этого значения может повлиять на производительность системы. Для изменения значения параметра PrintJobLimit выполните следующие шаги: 1) Щелкните мышью на кнопках Start > Run. Появится диалоговое окно Run. 2) Наберите команду "regedit" в поле Open. Щелкните на кнопке OK. Появится окно Registry Editor. Перейдите к соответствующему значению раздела реестра, как показано ниже. Для Crystal Reports 10.0.x HKEY_LOCAL_MACHINE\SOFTWARE\Crystal Decisions\10.0\Report Application Server\ InprocServer\PrintJobLimit Для Crystal Reports 10.2 (Visual Studio .NET 2005 bundle) HKEY_LOCAL_MACHINE\SOFTWARE\Crystal Decisions\10.2\Report Application Server\ InprocServer\PrintJobLimit Для Crystal Reports Basic for Visual Studio 2008 (Visual Studio .NET 2008 bundle) HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\10.5\report Application server\InProcServer\ PrintJobLimit\PrintJobLimit Для Crystal Reports XI Release 1 (11.0.x) HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 11.0\Report Application Server\InprocServer\PrintJobLimit Для Crystal Reports XI Release 2 (11.5.x) HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 11.5\Report Application Server\InprocServer\PrintJobLimit Для Crystal Reports 2008 (12.x.x) HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 12.0\Report Application Server\InprocServer\PrintJobLimit При установке значения PrintJobLimit равным "-1" удаляются все ограничения на задания печати.
Серверы с дополнительной памятью, с двойным или даже четверным ядром CPU являются опциональными. Также заслуживает рассмотрения возможность использования веб-ферм. Для получения дополнительной информации о веб-фермах (web-farms) обратитесь к веб-ресурсу для разработчиков Microsoft MSDN Visual Studio 2008 Developer Center; "How Do I Use Crystal Reports in a Web Farm or Web Garden?" (Как я могу использовать Crystal Reports в Web Farm или Web Garden?).
Рассмотрите возможность перехода к системе с более гибкими средствами расширения, например Crystal Reports Report Application Server или Business Objects Enterprise.
|
|