Поведение StiWebDesigner по окончании timeout

Обсуждение Stimulsoft Ultimate
Ответить
DogHole
Сообщения: 3
Зарегистрирован: 15 дек 2011, 06:47
Откуда: Ru

Поведение StiWebDesigner по окончании timeout

Сообщение DogHole »

Здравствуйте.
Описание проблемы:
Проект использует аутентификацию форм с заданным временем жизни (timeout) с пролонгированием.
На странице только объект дизайнера, в который подгружается отчет из БД (SQL):

Код:
protected void Page_Load(object sender, EventArgs e)
{
string keyStMode = Page.Request.QueryString.Get("stimulsoft_designerfx");
string keyStGuid = Page.Request.QueryString.Get("stimulsoft_guid");

if (!Page.IsPostBack && keyStMode==null)
{
string skeyid = Page.Request.QueryString.Get("keyid");
int keyid = 0;
if (!String.IsNullOrEmpty(skeyid) && int.TryParse(skeyid, out keyid))
LoadReport(keyid);
}
else
{
if (!String.IsNullOrEmpty(keyStMode) && keyStMode=="SaveReport" && !String.IsNullOrEmpty(keyStGuid))
{
string skeyid = Page.Request.QueryString.Get("keyid");
int keyid = 0;
if (!String.IsNullOrEmpty(skeyid) && int.TryParse(skeyid, out keyid))
LoadReport(keyid);
}
}
}

protected void WebDesigner_SaveReport(object sender, Stimulsoft.Report.Web.StiWebDesigner.StiSaveReportEventArgs e)
{
String body=e.Report.SavePackedReportToString();
//код сохранения в базу
}
Все работает отлично. неоднократно все сохранялось, закрывалась страница и вновь открывалась. Все изменения были на месте.
Но если оставить открытым дизайнер, то после некоторого бездействия, по окончании timeout, естественно, происходит переброс на страницу аутентификации. (Например, при нажатии на кнопку Сохранить.) После успешной аутентификации переброс на страницу с дизайнером (с параметрами SaveReport и guid). Происходит следующая последовательность событий: WebDesigner_SaveReport и Page_Load. В итоге открывается новый пустой отчет. При чем он сохраняется пустым. Т.е. вся работа потеряна.
Что это? Ошибка или неумелое использование Дизайнера? Объясните.

ПО: Stimulsoft Reports.Ultimate 2011.3.1200.0; Win 7 SP1 64; Visual Studio 2008; .Net framework 3.5 SP1
Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

Поведение StiWebDesigner по окончании timeout

Сообщение Vladimir »

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

Что бы предотвратить сброс сессии по таймауту, вы можете включить автосохранение отчёта:

StiWebDesignerOptions.AutoSaveInterval = 5; // интервал автосохранения, в минутах

Спасибо.
DogHole
Сообщения: 3
Зарегистрирован: 15 дек 2011, 06:47
Откуда: Ru

Поведение StiWebDesigner по окончании timeout

Сообщение DogHole »

Здравствуйте.
Vladimir писал(а):
Что бы предотвратить сброс сессии по таймауту, вы можете включить автосохранение отчёта:

StiWebDesignerOptions.AutoSaveInterval = 5; // интервал автосохранения, в минутах
Да, наверное, это предотвратит завершение сессии, т.к. Дизайнер будет постоянно с периодом (меньшим таймаута) обращаться к серверу. Но визуально это выглядит некрасиво. Ведь сохранение серверное. А оно ведет к перезагрузке всей страницы. И если пользователь работает на данный момент в Дизайнере, то его процесс будет неожиданно прерываться на сохранение и загрузку страницы.

И все-таки остался открытым вопрос, почему по окончании сессии в обработчик сохранения приходит пустой отчет (e.Report), а не хотя бы тот, что был последним сохранен (или открыт).

И кстати, не помогло. Автосохранение выполнялось, но после завершения таймаута выбросило на страницу логина. И ситуация повторилась. Пустой отчет (e.Report), пришедший в обработчик, перезаписал ранее созданный. Хотя открыт был отчет с оформлением.
Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

Поведение StiWebDesigner по окончании timeout

Сообщение Vladimir »

Здравствуйте,
Но визуально это выглядит некрасиво. Ведь сохранение серверное. А оно ведет к перезагрузке всей страницы. И если пользователь работает на данный момент в Дизайнере, то его процесс будет неожиданно прерываться на сохранение и загрузку страницы.
Сохранении отчёта выполняется в AJAX-режиме, т.е. дизайнер посылает запрос и получает ответ, не перезагружая страницу браузера. Судя по коду, у Вас для каких-то целей установлен не AJAX режим сохранения SaveMode="Visible" , в этом режиме страница будет перезагружаться.
И все-таки остался открытым вопрос, почему по окончании сессии в обработчик сохранения приходит пустой отчет (e.Report), а не хотя бы тот, что был последним сохранен (или открыт).
Скорее всего, это происходит из-за того, что при передаче данных на сохранение, сервер игнорирует их и выдаёт в качестве ответа страницу с предложением ввести логин и пароль, если сессия завершена. После запуска новой сессии, все данные старой сессии теряются, и в обработчик события передаётся пустой отчёт.


Можно добавить возможность периодического обновления сессии. То есть, если установлена определённая опция, дизайнер через заданный период времени будет посылать специальный запрос на сервер для поддержания сессии. Мы постараемся поискать что-то в этом направлении. Если у Вас есть идеи - мы будем рады их рассмотреть.

Спасибо.
DogHole
Сообщения: 3
Зарегистрирован: 15 дек 2011, 06:47
Откуда: Ru

Поведение StiWebDesigner по окончании timeout

Сообщение DogHole »

Здравствуйте, Vladimir.
Оказывается, со мной сыграла злую шутку документация, в которой дословно сказано: "Сохранение отчёта производиться в фоновом режиме, т.е. визуально это никак не будет отображаться. Если необходимо каким-либо образом визуально управлять процессом сохранения отчёта, следует изменить значение свойство SaveMode компонента StiWebDesigner на одно из двух значений: Visible либо NewWindow". Мной данная фраза была понята как то, что данный параметр SaveMode управляет только режимом отображения успеха/неуспеха сохранения, а не принципом сохранения (postback/callback). Извините, что так вышло.
После возврата SaveMode=Hidden не теряется хотя бы последнее сохраненное состояние.
А советы давать трудно, когда не известен сам механизм. Можно только догадываться и постепенно узнавать его в процессе работы с продуктом. (Я всего неделю как общаюсь с ним). Вы храните отчет в кэше, он не теряется по окончании сессии. Но не понятно откуда берется имя параметра кэша, оно никак не совпадает с guid в строке запроса (stimulsoft_guid). Более того этот guid из строки запроса не совпадает с guid отчета.
Но, действительно, лучшим выходом будет отправить некий запрос к серверу (пусть фиктивный) для продления сессии. Иначе даже если пользователь работает, все равно сессия заканчивается. Спасает только сохранение/автосохранение.

Спасибо Вам за скорый ответ.
Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

Поведение StiWebDesigner по окончании timeout

Сообщение Vladimir »

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

В любом случае, мы уже добавили в наш to-do список добавление функции поддержания сессии в Designer.Web, скорее всего это будет опционально. Только к сожалению, по срокам пока ничего сказать не можем.

Спасибо.
Ответить