Здравствуйте.
Описание проблемы:
Проект использует аутентификацию форм с заданным временем жизни (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
Поведение StiWebDesigner по окончании timeout
Поведение StiWebDesigner по окончании timeout
Здравствуйте,
Что бы предотвратить сброс сессии по таймауту, вы можете включить автосохранение отчёта:
StiWebDesignerOptions.AutoSaveInterval = 5; // интервал автосохранения, в минутах
Спасибо.
Что бы предотвратить сброс сессии по таймауту, вы можете включить автосохранение отчёта:
StiWebDesignerOptions.AutoSaveInterval = 5; // интервал автосохранения, в минутах
Спасибо.
Поведение StiWebDesigner по окончании timeout
Здравствуйте.
И все-таки остался открытым вопрос, почему по окончании сессии в обработчик сохранения приходит пустой отчет (e.Report), а не хотя бы тот, что был последним сохранен (или открыт).
И кстати, не помогло. Автосохранение выполнялось, но после завершения таймаута выбросило на страницу логина. И ситуация повторилась. Пустой отчет (e.Report), пришедший в обработчик, перезаписал ранее созданный. Хотя открыт был отчет с оформлением.
Да, наверное, это предотвратит завершение сессии, т.к. Дизайнер будет постоянно с периодом (меньшим таймаута) обращаться к серверу. Но визуально это выглядит некрасиво. Ведь сохранение серверное. А оно ведет к перезагрузке всей страницы. И если пользователь работает на данный момент в Дизайнере, то его процесс будет неожиданно прерываться на сохранение и загрузку страницы.Vladimir писал(а):
Что бы предотвратить сброс сессии по таймауту, вы можете включить автосохранение отчёта:
StiWebDesignerOptions.AutoSaveInterval = 5; // интервал автосохранения, в минутах
И все-таки остался открытым вопрос, почему по окончании сессии в обработчик сохранения приходит пустой отчет (e.Report), а не хотя бы тот, что был последним сохранен (или открыт).
И кстати, не помогло. Автосохранение выполнялось, но после завершения таймаута выбросило на страницу логина. И ситуация повторилась. Пустой отчет (e.Report), пришедший в обработчик, перезаписал ранее созданный. Хотя открыт был отчет с оформлением.
Поведение StiWebDesigner по окончании timeout
Здравствуйте,
Можно добавить возможность периодического обновления сессии. То есть, если установлена определённая опция, дизайнер через заданный период времени будет посылать специальный запрос на сервер для поддержания сессии. Мы постараемся поискать что-то в этом направлении. Если у Вас есть идеи - мы будем рады их рассмотреть.
Спасибо.
Сохранении отчёта выполняется в AJAX-режиме, т.е. дизайнер посылает запрос и получает ответ, не перезагружая страницу браузера. Судя по коду, у Вас для каких-то целей установлен не AJAX режим сохранения SaveMode="Visible" , в этом режиме страница будет перезагружаться.Но визуально это выглядит некрасиво. Ведь сохранение серверное. А оно ведет к перезагрузке всей страницы. И если пользователь работает на данный момент в Дизайнере, то его процесс будет неожиданно прерываться на сохранение и загрузку страницы.
Скорее всего, это происходит из-за того, что при передаче данных на сохранение, сервер игнорирует их и выдаёт в качестве ответа страницу с предложением ввести логин и пароль, если сессия завершена. После запуска новой сессии, все данные старой сессии теряются, и в обработчик события передаётся пустой отчёт.И все-таки остался открытым вопрос, почему по окончании сессии в обработчик сохранения приходит пустой отчет (e.Report), а не хотя бы тот, что был последним сохранен (или открыт).
Можно добавить возможность периодического обновления сессии. То есть, если установлена определённая опция, дизайнер через заданный период времени будет посылать специальный запрос на сервер для поддержания сессии. Мы постараемся поискать что-то в этом направлении. Если у Вас есть идеи - мы будем рады их рассмотреть.
Спасибо.
Поведение StiWebDesigner по окончании timeout
Здравствуйте, Vladimir.
Оказывается, со мной сыграла злую шутку документация, в которой дословно сказано: "Сохранение отчёта производиться в фоновом режиме, т.е. визуально это никак не будет отображаться. Если необходимо каким-либо образом визуально управлять процессом сохранения отчёта, следует изменить значение свойство SaveMode компонента StiWebDesigner на одно из двух значений: Visible либо NewWindow". Мной данная фраза была понята как то, что данный параметр SaveMode управляет только режимом отображения успеха/неуспеха сохранения, а не принципом сохранения (postback/callback). Извините, что так вышло.
После возврата SaveMode=Hidden не теряется хотя бы последнее сохраненное состояние.
А советы давать трудно, когда не известен сам механизм. Можно только догадываться и постепенно узнавать его в процессе работы с продуктом. (Я всего неделю как общаюсь с ним). Вы храните отчет в кэше, он не теряется по окончании сессии. Но не понятно откуда берется имя параметра кэша, оно никак не совпадает с guid в строке запроса (stimulsoft_guid). Более того этот guid из строки запроса не совпадает с guid отчета.
Но, действительно, лучшим выходом будет отправить некий запрос к серверу (пусть фиктивный) для продления сессии. Иначе даже если пользователь работает, все равно сессия заканчивается. Спасает только сохранение/автосохранение.
Спасибо Вам за скорый ответ.
Оказывается, со мной сыграла злую шутку документация, в которой дословно сказано: "Сохранение отчёта производиться в фоновом режиме, т.е. визуально это никак не будет отображаться. Если необходимо каким-либо образом визуально управлять процессом сохранения отчёта, следует изменить значение свойство SaveMode компонента StiWebDesigner на одно из двух значений: Visible либо NewWindow". Мной данная фраза была понята как то, что данный параметр SaveMode управляет только режимом отображения успеха/неуспеха сохранения, а не принципом сохранения (postback/callback). Извините, что так вышло.
После возврата SaveMode=Hidden не теряется хотя бы последнее сохраненное состояние.
А советы давать трудно, когда не известен сам механизм. Можно только догадываться и постепенно узнавать его в процессе работы с продуктом. (Я всего неделю как общаюсь с ним). Вы храните отчет в кэше, он не теряется по окончании сессии. Но не понятно откуда берется имя параметра кэша, оно никак не совпадает с guid в строке запроса (stimulsoft_guid). Более того этот guid из строки запроса не совпадает с guid отчета.
Но, действительно, лучшим выходом будет отправить некий запрос к серверу (пусть фиктивный) для продления сессии. Иначе даже если пользователь работает, все равно сессия заканчивается. Спасает только сохранение/автосохранение.
Спасибо Вам за скорый ответ.
Поведение StiWebDesigner по окончании timeout
Здравствуйте,
В любом случае, мы уже добавили в наш to-do список добавление функции поддержания сессии в Designer.Web, скорее всего это будет опционально. Только к сожалению, по срокам пока ничего сказать не можем.
Спасибо.
В любом случае, мы уже добавили в наш to-do список добавление функции поддержания сессии в Designer.Web, скорее всего это будет опционально. Только к сожалению, по срокам пока ничего сказать не можем.
Спасибо.