Report.Render Issue
Report.Render Issue
We are having an issue when we try to move one of our reports to our production server. It is running 64 bit Windows 2003 sp2, and it is running IIS in 32-bit mode. The code stops and crashes the IIS Application Pool when it gets to Report.Render(false) The report is only 6 pages. If we split the pages into two reports, each having 3 pages, they run with no problem. Has anyone else experienced this issue? Any suggestions to resolve? The report run successfully on multiple development machines with no problem.
Report.Render Issue
Hello,
Please provide more information about this problem. Please post full error stack of this error.
Thank you.
Please provide more information about this problem. Please post full error stack of this error.
Thank you.
Report.Render Issue
I sent an email with the error message that we are getting to support@stimulsoft.com.
Re: Report.Render Issue
Здравствуйте. Столкнулись с такой же проблемой. Приложение на Silverlight, есть отчет объемом в пять страниц. На машинах разработчиков он рендерится и отображается без проблем (при работе на ASP .Net Development Server). Но когда приложение разворачивается на сервере (WinServer 8 + IIS 7) - Render не отрабатывает. Точнее на стороне клиента получаем сообщение о истекшем таймауте для запроса, а на сервере сперва быстро растет объем используемой оперативной памяти, затем приложение падает/убивается кем-то.
Эта проблема так и не была решена?
Эта проблема так и не была решена?
-
- Posts: 135
- Joined: Tue Aug 11, 2009 9:38 am
Re: Report.Render Issue
Здравствуйте,
Знаете тяжело сказать, чтобы было 3 года назад, за это время было сделано много нововведений во всех продуктов, а также множество оптимизаций и фиксов, которые ускоряли многие моменты и исправляли ошибки. Конкретно данный случай мы не припоминаем, должно было фикситься, если была проблема. Если у нас последний релизных версиях данная проблема присутствует - пожалуйста пришлите рабочий пример проекта для анализа сюда, либо на саппорт. И мы постараемся разобраться и помочь Вам.
Спасибо.
Знаете тяжело сказать, чтобы было 3 года назад, за это время было сделано много нововведений во всех продуктов, а также множество оптимизаций и фиксов, которые ускоряли многие моменты и исправляли ошибки. Конкретно данный случай мы не припоминаем, должно было фикситься, если была проблема. Если у нас последний релизных версиях данная проблема присутствует - пожалуйста пришлите рабочий пример проекта для анализа сюда, либо на саппорт. И мы постараемся разобраться и помочь Вам.
Спасибо.
Re: Report.Render Issue
Спасибо. Отправил архив с тестовым приложением на саппорт. Приложение необходимо развернуть на IIS.
Так же при запуске его в Debug'е из под Visual Studio, метод Render падает со StackOverflow
P.S. и подскажите, пожалуйста, по такому вопросу: можно ли с сервера на клиент передать шаблон с заполненным словарем, но не отрендеренный? Что бы выполнить рендер на стороне клиента? (заполнить шаблон данными на клиенте не получается, в связи с отутствием класса DataSet в Silverlight) Пытался это осуществить - на клиента приходит шаблон, у него в словаре есть дерево данных, но, судя по всему, отсутствуют значения, т.к. после рендера шаблон выводится без данных
Так же при запуске его в Debug'е из под Visual Studio, метод Render падает со StackOverflow
P.S. и подскажите, пожалуйста, по такому вопросу: можно ли с сервера на клиент передать шаблон с заполненным словарем, но не отрендеренный? Что бы выполнить рендер на стороне клиента? (заполнить шаблон данными на клиенте не получается, в связи с отутствием класса DataSet в Silverlight) Пытался это осуществить - на клиента приходит шаблон, у него в словаре есть дерево данных, но, судя по всему, отсутствуют значения, т.к. после рендера шаблон выводится без данных
-
- Posts: 135
- Joined: Tue Aug 11, 2009 9:38 am
Re: Report.Render Issue
Здравствуйте,
Спасибо за присланный пример проекта. Он помог воспроизвести проблему.
Итак:
1. Вам нужно вызывать метод Render() с параметром false -> template.Render(false); По умолчанию значение true.
Чтобы не вызывать окно прогресса, т.к. оно находится в сборке Stimulsoft.Report.Win, а она у вас не подключена в проекте, да и на серверной части оно не нужно.
2. Вы используете очень сложный отчет для Web сервера. В вашем отчете находится около 3000 компонентов, т.к. в таблицах очень много строк и ячеек.
При рендеринге отчета, он сначала компилируется с сборку, после чего эта сборка подгружается в проект, и в этот момент появляется ошибка StackOverflow, из-за того, что стэк в вэб приложениях в 4 раза меньше, чем в WinApplication.
Решение проблемы:
1. Можно упростить отчет, заменить компонент StiTable на StiDataBand. Т.к. у вас там 60% ячеек не используется, но это все равно компонент, который грузится, занимается память и загружает стэк.
2. Наши пользователи раньше сталкивались с такой проблемой и находили способ увеличивать размер стэка, что помогало загружать подобные большие отчеты. К сожалению примера нету, нам его не присылали.
Спасибо.
Спасибо за присланный пример проекта. Он помог воспроизвести проблему.
Итак:
1. Вам нужно вызывать метод Render() с параметром false -> template.Render(false); По умолчанию значение true.
Чтобы не вызывать окно прогресса, т.к. оно находится в сборке Stimulsoft.Report.Win, а она у вас не подключена в проекте, да и на серверной части оно не нужно.
2. Вы используете очень сложный отчет для Web сервера. В вашем отчете находится около 3000 компонентов, т.к. в таблицах очень много строк и ячеек.
При рендеринге отчета, он сначала компилируется с сборку, после чего эта сборка подгружается в проект, и в этот момент появляется ошибка StackOverflow, из-за того, что стэк в вэб приложениях в 4 раза меньше, чем в WinApplication.
Решение проблемы:
1. Можно упростить отчет, заменить компонент StiTable на StiDataBand. Т.к. у вас там 60% ячеек не используется, но это все равно компонент, который грузится, занимается память и загружает стэк.
2. Наши пользователи раньше сталкивались с такой проблемой и находили способ увеличивать размер стэка, что помогало загружать подобные большие отчеты. К сожалению примера нету, нам его не присылали.
Спасибо.
Re: Report.Render Issue
Спасибо большое за помощь. Действительно увеличение стэка решило проблему. К слову - попытки изменить шаблон особого результат не дали, т.е. с DataBand была та же ошибка, даже при уменьшении размера шаблона до 3-х страниц.
На всякий случай, может кому-нибудь когда-нибудь и пригодится:
Нашел такой способ обойти ограничение размера стэка, вроде бы все хорошо работает
На всякий случай, может кому-нибудь когда-нибудь и пригодится:
Code: Select all
var template = new StiReport();
// report processing ...
var thread = new Thread(template.Render, 4194304)
{
Priority = ThreadPriority.Normal,
Name = string.Format("StimulsoftRenderThread-{0}", DateTime.Now)
};
thread.Start();
thread.Join();
Re: Report.Render Issue
Здравствуйте,
Спасибо за пример кода.
Сообщите, если понадобится дополнительная помощь.
Спасибо за пример кода.
Сообщите, если понадобится дополнительная помощь.
-
- Posts: 135
- Joined: Tue Aug 11, 2009 9:38 am
Re: Report.Render Issue
Здравствуйте,
Но из них 80% не используется, а при рендеринге, чем больше компонентов, тем медленнее и дольше рендерится отчет, следовательно и кушает больше системных ресурсов.
В итоге можно заменить StiTable на StiDataBand и положить на него всего 30-40 StiText компонентов и десяток горизонтальных линий и получить такой-же результат.... И так с каждой таблицей.
Спасибо.
По этому поводу хотелось бы уточнить немного подробнее. Количество страниц не столько имеет значение. Более важным является другой фактор - сам по себе компонент StiTable является очень сложным, в результате перед рендерингом отчета он преобразуется в компоненты StiPanel и StiDataBand. В Вашем отчете, взять например таблицу Table1, в ней 20 колонок и 37 строк - итого 740 StiText компонентов.К слову - попытки изменить шаблон особого результат не дали, т.е. с DataBand была та же ошибка, даже при уменьшении размера шаблона до 3-х страниц.
Но из них 80% не используется, а при рендеринге, чем больше компонентов, тем медленнее и дольше рендерится отчет, следовательно и кушает больше системных ресурсов.
В итоге можно заменить StiTable на StiDataBand и положить на него всего 30-40 StiText компонентов и десяток горизонтальных линий и получить такой-же результат.... И так с каждой таблицей.
Спасибо.