Страница 1 из 2
Непредсказуемый веб-вьювер
Добавлено: 14 авг 2009, 09:32
mimas
Постоянно сталкиваемся с проблемой:
открываем в веб-вьювере отчет. страниц на 40 например. вьюевер покрутил-подумал и выдал белую страницу.
кнопки доступны.. отчета нет. если нажать экспорт в эксель например, то всё отлично экспортится.
восновном конечно пролема всплывает когда отчеты не самые маленькие (от десятков страниц). но численных экспериментов не проводил. Иногда один и тот же отчет то открывается, то нет. пользователи таких приколов не понимают - чистый лист - значит у этих айтишников ничего не работает. приходится минуя вьювер сразу в респонс эксель выкидывать.
Давайте кат-то вылечим этот косячок.
Непредсказуемый веб-вьювер
Добавлено: 14 авг 2009, 10:36
Vladimir
Здравствуйте,
Скорее всего, Ваша проблема связана с переполнением кэша на сервере.
Сообщите следующие данные:
1. В каком событии происходит рендеринг отчёта (присвоение его WebViewer-у)
2. Какое значение выбрано у RenderMode
3. Какое значение установлено у ServerTimeOut
Спасибо.
Непредсказуемый веб-вьювер
Добавлено: 25 авг 2009, 11:33
mimas
1. на Page_Load
2. было Ajax. исправил на AjaxWithCacheю но точно сказать помогло или нет не могу, ошибка не проявляется какоето время. может и помогло.
3. таймаут по умолчанию
Непредсказуемый веб-вьювер
Добавлено: 26 авг 2009, 05:01
Vladimir
Здравствуйте,
Да, режим AjaxWithCache снимает нагрузку с сервера (в режиме Ajax без кэша отчёт каждый раз компилируется заново).
Так же попробуйте установить время жизни кэша 5 минут (по умолчанию установлено 15), это дополнительно немного разгрузит память сервера.
Спасибо.
Непредсказуемый веб-вьювер
Добавлено: 31 авг 2009, 03:49
mimas
>>Так же попробуйте установить время жизни кэша 5 минут (по умолчанию установлено 15), это дополнительно немного разгрузит память сервера.
Это как сделать?
Непредсказуемый веб-вьювер
Добавлено: 31 авг 2009, 07:58
Ivan
Здравствуйте.
Уменьшить таймаут кэша можно следующим образом:
1) у aspx компонента:
cc1:StiWebViewer ID="StiWebViewer1" runat="server" ServerTimeOut="00:05:00"
или 2) в коде:
StiWebViewer1.ServerTimeOut = new TimeSpan(0, 5, 0);
Спасибо.
Непредсказуемый веб-вьювер
Добавлено: 02 сен 2009, 04:52
mimas
Вобщем не помогло.. в связи с чем прошу проконсультируйте как наиболее эффективным способом нам построить веб-отчетность.
Имеем - пару десятков видов отчетов в MRT. одни проще, другие сложнее, одни совсем пухлые крос-отчеты (и проблемы восновном именно с ними). самый пухлый из них получается на основе датасета из трех тадатэйблов, который закидывается в отчет через RegData (см. код).
на основе параметров, переданных в страницу, определяем тип отчета, генерим датасет и прокидываем его в отчет, прокидываем Variables.
Ниже концептуальный код, используемый для получения отчетов.
Код: Выделить всё
private int number = -1; //номер отчета
protected void Page_Load(object sender, EventArgs e)
{
number = Параметр_страницы_0;
if (StiViewer.IsImageRequest) return;
ShowReport(this.number);
}
protected void ShowReport(int number)
{
StiReport report = null;
switch(number)
{
case -1:
break;
case 32:
report = InitReport(number);
if (report != null)
{
DataTable dt1 = new DataTable("Registr");
DataTable dt2 = new DataTable("Date");
DataTable dt3 = new DataTable("ValueProgress");
DataSet ds = new DataSet();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
ds.Tables.Add(dt3);
SqlDataReader dr1 = GetReport_RegistrDocument(Параметр_страницы_1);
dt1.Load(dr1, LoadOption.OverwriteChanges);
SqlDataReader dr2 = GetReport_DateRegistrDocument();
dt2.Load(dr2, LoadOption.OverwriteChanges);
SqlDataReader dr3 = GetReport_ValueProgressRegistrDocument();
dt3.Load(dr3, LoadOption.OverwriteChanges);
report.RegData(ds);
PrepareViewer(report, StiViewer);
}
break;
case 33:
report = InitReport(number);
if (report != null)
{
report.Dictionary.Variables["ProjectName"].Value = "ла-ла-ла"
report.Dictionary.Variables["StageName"].Value = "ла-ла-ла"
report.Dictionary.Variables["ps"].Value = Параметр_страницы_1;
report.Dictionary.Variables["cat"].Value = Параметр_страницы_2;
report.Dictionary.Variables["voidtype"].Value = Параметр_страницы_3;
report.Dictionary.Synchronize();
report.Compile();
PrepareViewer(report, StiViewer);
}
break;
default:
throw new Exception("Отчета с таким номером не существует");
break;
}
}
}
protected Stimulsoft.Report.StiReport InitReport(int number)
{
Stimulsoft.Report.StiReport report = new Stimulsoft.Report.StiReport();
switch (number)
{
case -1:
break;
case 33:
report.Load(HostingEnvironment.MapPath("~/docsinside/reports_site/DocExecutionByProjectComposition.mrt"));
break;
case 34:
report.Load(HostingEnvironment.MapPath("~/docsinside/reports_site/la-la-la.mrt"));
break;
default:
throw new Exception("Отчета с таким номером не существует");
}
return report;
}
protected void PrepareViewer(StiReport report, StiWebViewer viewer)
{
viewer.ServerTimeOut = new TimeSpan(0, 5, 0);
report.Render(false);
viewer.Report = report;
}
Проблемы:
1) отчет не рендерится - белый лист и кнопки навигации
2) OutofMemoryException. реально самый большой отчет даже на локальной отладочной машине дохнет. процесс асп_нет кушает 600 метров оперативной и еще 600 метров виртуальной памяти. Такой показатель на отчете из примера, где на странице получается датасет, который потом регистрируется в репорте. Есть отчеты в которые таким же макарром прокидываются не датасеты а коллекции бизнес-объектов, полученные на странице.
С отчетами, построенными без участия методов получения данных на странице (т.е. конекш внутри отчета, там же свои внутренние источники данных, заполняемые на основе variables) вроде проблем не замечено.
Пробовал включать кэш. логично что толстые отчеты кэшем убьют сервер. отключил. ничего не изменилось
В самих отчетах никаких картинок и тяжелых данных - только текст.
Непредсказуемый веб-вьювер
Добавлено: 03 сен 2009, 09:23
Jan
Здравствуйте,
А сколько страниц в самом большом отчете?
Спасибо.
Непредсказуемый веб-вьювер
Добавлено: 04 сен 2009, 04:34
mimas
под 200 - уже отваливается. бывает и больше
Непредсказуемый веб-вьювер
Добавлено: 04 сен 2009, 06:36
Jan
Здравствуйте,
А сколько памяти занимает процесс Asp.net при построении отчета на локальной машине? Обычно при 200-300 мегабайтах процесс перезапускается. Обвал начинается в момент построения отчета или в момент отображения отчета?
2. было Ajax. исправил на AjaxWithCacheю но точно сказать помогло или нет не могу, ошибка не проявляется какоето время. может и помогло.
Режимы с кэшированием отчета позволяют при обновлении страницы не перестраивать отчет (т.е. увеличить скорость), а взять его из кэша. Это занимает дополнительную память.
Спасибо.