Report.Render Issue

Stimulsoft Reports.NET discussion
EMA
Posts: 9
Joined: Wed Feb 24, 2010 1:32 pm
Location: Dallas, Texas

Report.Render Issue

Post by EMA »

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.
Jan
Posts: 1265
Joined: Thu Feb 19, 2009 8:19 am

Report.Render Issue

Post by Jan »

Hello,

Please provide more information about this problem. Please post full error stack of this error.

Thank you.
EMA
Posts: 9
Joined: Wed Feb 24, 2010 1:32 pm
Location: Dallas, Texas

Report.Render Issue

Post by EMA »

I sent an email with the error message that we are getting to support@stimulsoft.com.
d33t
Posts: 4
Joined: Thu Apr 25, 2013 11:54 am
Location: Россия, Ярославль

Re: Report.Render Issue

Post by d33t »

Здравствуйте. Столкнулись с такой же проблемой. Приложение на Silverlight, есть отчет объемом в пять страниц. На машинах разработчиков он рендерится и отображается без проблем (при работе на ASP .Net Development Server). Но когда приложение разворачивается на сервере (WinServer 8 + IIS 7) - Render не отрабатывает. Точнее на стороне клиента получаем сообщение о истекшем таймауте для запроса, а на сервере сперва быстро растет объем используемой оперативной памяти, затем приложение падает/убивается кем-то.

Эта проблема так и не была решена?
Anton Lozovskiy
Posts: 135
Joined: Tue Aug 11, 2009 9:38 am

Re: Report.Render Issue

Post by Anton Lozovskiy »

Здравствуйте,

Знаете тяжело сказать, чтобы было 3 года назад, за это время было сделано много нововведений во всех продуктов, а также множество оптимизаций и фиксов, которые ускоряли многие моменты и исправляли ошибки. Конкретно данный случай мы не припоминаем, должно было фикситься, если была проблема. Если у нас последний релизных версиях данная проблема присутствует - пожалуйста пришлите рабочий пример проекта для анализа сюда, либо на саппорт. И мы постараемся разобраться и помочь Вам.

Спасибо.
d33t
Posts: 4
Joined: Thu Apr 25, 2013 11:54 am
Location: Россия, Ярославль

Re: Report.Render Issue

Post by d33t »

Спасибо. Отправил архив с тестовым приложением на саппорт. Приложение необходимо развернуть на IIS.
Так же при запуске его в Debug'е из под Visual Studio, метод Render падает со StackOverflow

P.S. и подскажите, пожалуйста, по такому вопросу: можно ли с сервера на клиент передать шаблон с заполненным словарем, но не отрендеренный? Что бы выполнить рендер на стороне клиента? (заполнить шаблон данными на клиенте не получается, в связи с отутствием класса DataSet в Silverlight) Пытался это осуществить - на клиента приходит шаблон, у него в словаре есть дерево данных, но, судя по всему, отсутствуют значения, т.к. после рендера шаблон выводится без данных
Anton Lozovskiy
Posts: 135
Joined: Tue Aug 11, 2009 9:38 am

Re: Report.Render Issue

Post by Anton Lozovskiy »

Здравствуйте,

Спасибо за присланный пример проекта. Он помог воспроизвести проблему.

Итак:
1. Вам нужно вызывать метод Render() с параметром false -> template.Render(false); По умолчанию значение true.
Чтобы не вызывать окно прогресса, т.к. оно находится в сборке Stimulsoft.Report.Win, а она у вас не подключена в проекте, да и на серверной части оно не нужно.

2. Вы используете очень сложный отчет для Web сервера. В вашем отчете находится около 3000 компонентов, т.к. в таблицах очень много строк и ячеек.
При рендеринге отчета, он сначала компилируется с сборку, после чего эта сборка подгружается в проект, и в этот момент появляется ошибка StackOverflow, из-за того, что стэк в вэб приложениях в 4 раза меньше, чем в WinApplication.

Решение проблемы:
1. Можно упростить отчет, заменить компонент StiTable на StiDataBand. Т.к. у вас там 60% ячеек не используется, но это все равно компонент, который грузится, занимается память и загружает стэк.

2. Наши пользователи раньше сталкивались с такой проблемой и находили способ увеличивать размер стэка, что помогало загружать подобные большие отчеты. К сожалению примера нету, нам его не присылали.

Спасибо.
d33t
Posts: 4
Joined: Thu Apr 25, 2013 11:54 am
Location: Россия, Ярославль

Re: Report.Render Issue

Post by d33t »

Спасибо большое за помощь. Действительно увеличение стэка решило проблему. К слову - попытки изменить шаблон особого результат не дали, т.е. с 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();
Нашел такой способ обойти ограничение размера стэка, вроде бы все хорошо работает
Alex K.
Posts: 6488
Joined: Thu Jul 29, 2010 2:37 am

Re: Report.Render Issue

Post by Alex K. »

Здравствуйте,

Спасибо за пример кода.
Сообщите, если понадобится дополнительная помощь.
Anton Lozovskiy
Posts: 135
Joined: Tue Aug 11, 2009 9:38 am

Re: Report.Render Issue

Post by Anton Lozovskiy »

Здравствуйте,
К слову - попытки изменить шаблон особого результат не дали, т.е. с DataBand была та же ошибка, даже при уменьшении размера шаблона до 3-х страниц.
По этому поводу хотелось бы уточнить немного подробнее. Количество страниц не столько имеет значение. Более важным является другой фактор - сам по себе компонент StiTable является очень сложным, в результате перед рендерингом отчета он преобразуется в компоненты StiPanel и StiDataBand. В Вашем отчете, взять например таблицу Table1, в ней 20 колонок и 37 строк - итого 740 StiText компонентов.

Но из них 80% не используется, а при рендеринге, чем больше компонентов, тем медленнее и дольше рендерится отчет, следовательно и кушает больше системных ресурсов.
В итоге можно заменить StiTable на StiDataBand и положить на него всего 30-40 StiText компонентов и десяток горизонтальных линий и получить такой-же результат.... И так с каждой таблицей.

Спасибо.
Post Reply