Page 1 of 2

Report.Render Issue

Posted: Tue Apr 06, 2010 4:54 pm
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.

Report.Render Issue

Posted: Wed Apr 07, 2010 1:01 am
by Jan
Hello,

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

Thank you.

Report.Render Issue

Posted: Wed Apr 07, 2010 9:30 am
by EMA
I sent an email with the error message that we are getting to support@stimulsoft.com.

Re: Report.Render Issue

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

Эта проблема так и не была решена?

Re: Report.Render Issue

Posted: Fri Apr 26, 2013 10:49 am
by Anton Lozovskiy
Здравствуйте,

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

Спасибо.

Re: Report.Render Issue

Posted: Mon Apr 29, 2013 8:02 am
by d33t
Спасибо. Отправил архив с тестовым приложением на саппорт. Приложение необходимо развернуть на IIS.
Так же при запуске его в Debug'е из под Visual Studio, метод Render падает со StackOverflow

P.S. и подскажите, пожалуйста, по такому вопросу: можно ли с сервера на клиент передать шаблон с заполненным словарем, но не отрендеренный? Что бы выполнить рендер на стороне клиента? (заполнить шаблон данными на клиенте не получается, в связи с отутствием класса DataSet в Silverlight) Пытался это осуществить - на клиента приходит шаблон, у него в словаре есть дерево данных, но, судя по всему, отсутствуют значения, т.к. после рендера шаблон выводится без данных

Re: Report.Render Issue

Posted: Mon Apr 29, 2013 12:58 pm
by Anton Lozovskiy
Здравствуйте,

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

Итак:
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

Posted: Tue Apr 30, 2013 5:26 am
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();
Нашел такой способ обойти ограничение размера стэка, вроде бы все хорошо работает

Re: Report.Render Issue

Posted: Tue Apr 30, 2013 8:03 am
by Alex K.
Здравствуйте,

Спасибо за пример кода.
Сообщите, если понадобится дополнительная помощь.

Re: Report.Render Issue

Posted: Tue Apr 30, 2013 8:26 am
by Anton Lozovskiy
Здравствуйте,
К слову - попытки изменить шаблон особого результат не дали, т.е. с DataBand была та же ошибка, даже при уменьшении размера шаблона до 3-х страниц.
По этому поводу хотелось бы уточнить немного подробнее. Количество страниц не столько имеет значение. Более важным является другой фактор - сам по себе компонент StiTable является очень сложным, в результате перед рендерингом отчета он преобразуется в компоненты StiPanel и StiDataBand. В Вашем отчете, взять например таблицу Table1, в ней 20 колонок и 37 строк - итого 740 StiText компонентов.

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

Спасибо.