ViewerEvent возвращает "null"
ViewerEvent возвращает "null"
Добрый день.
Используем StiMvcViewer.
При открытии отчета (зароса на GetReportSnapshot) отчет в браузере открывается корректно.
Но, например, при переходе на следующую страницу в ответ на запрос к ViewerEvent браузер получает ответ в виде строки "null". Такая проблема возникает хаотично. Иногда несколько раз подряд страница перелистнется корректно, иногда несколько раз подряд будет получен null, иногда будет чередоваться)
На localhost такой проблемы нет, все отлично работает. На тестовом стенде (по http) тоже проблем не наблюдается.
Но при заливке на боевой кластер столкнулись с этой проблемой. Доступ к сайту возможен только по https.
Относительные урлы включены. Кеширование отчетов отключено.
Также на том же боевом кластере иногда возникает js ошибка: ncaught TypeError: Cannot read property 'bookmarksContent' of undefined
в функции:
StiMvcViewer.prototype.showReportPage = function (htmlText, jsObject) {
....
}
на строке:
if (parameters.bookmarksContent) jsObject.InitializeBookmarksPanel();
В StiMvcViewerOptions:
Toolbar =
{
ShowParametersButton = false,
ShowBookmarksButton = false
}
Сомневаюсь, но, возможно, они как-то связаны.
Спасибо.
Дополнение:
При тех же условиях (https, кластер) жмем "печать" -> "печать с просмотром". Получаем страницу с ошибкой:
The view 'ViewerEvent' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Goverment/Views/WayBill/ViewerEvent.aspx
~/Areas/Goverment/Views/WayBill/ViewerEvent.ascx
....
Используем StiMvcViewer.
При открытии отчета (зароса на GetReportSnapshot) отчет в браузере открывается корректно.
Но, например, при переходе на следующую страницу в ответ на запрос к ViewerEvent браузер получает ответ в виде строки "null". Такая проблема возникает хаотично. Иногда несколько раз подряд страница перелистнется корректно, иногда несколько раз подряд будет получен null, иногда будет чередоваться)
На localhost такой проблемы нет, все отлично работает. На тестовом стенде (по http) тоже проблем не наблюдается.
Но при заливке на боевой кластер столкнулись с этой проблемой. Доступ к сайту возможен только по https.
Относительные урлы включены. Кеширование отчетов отключено.
Также на том же боевом кластере иногда возникает js ошибка: ncaught TypeError: Cannot read property 'bookmarksContent' of undefined
в функции:
StiMvcViewer.prototype.showReportPage = function (htmlText, jsObject) {
....
}
на строке:
if (parameters.bookmarksContent) jsObject.InitializeBookmarksPanel();
В StiMvcViewerOptions:
Toolbar =
{
ShowParametersButton = false,
ShowBookmarksButton = false
}
Сомневаюсь, но, возможно, они как-то связаны.
Спасибо.
Дополнение:
При тех же условиях (https, кластер) жмем "печать" -> "печать с просмотром". Получаем страницу с ошибкой:
The view 'ViewerEvent' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Goverment/Views/WayBill/ViewerEvent.aspx
~/Areas/Goverment/Views/WayBill/ViewerEvent.ascx
....
Re: ViewerEvent возвращает "null"
Здравствуйте, Сергей.
Уточните, пожалуйста, какую версию нашего продукта вы используете.
Спасибо.
Уточните, пожалуйста, какую версию нашего продукта вы используете.
Спасибо.
Re: ViewerEvent возвращает "null"
Version: 2015.2 from 30 September 2015
Re: ViewerEvent возвращает "null"
Здравствуйте, Сергей.
Возможно данная проблема уже решена. Попробуйте обновиться до последнего билда.
Если проблема всё ещё возникает. Нам необходима более подробная информаия о конфигурации вашего сервера, которая позволит нам воспроизвести проблему.
Спасибо.
Возможно данная проблема уже решена. Попробуйте обновиться до последнего билда.
Если проблема всё ещё возникает. Нам необходима более подробная информаия о конфигурации вашего сервера, которая позволит нам воспроизвести проблему.
Спасибо.
Re: ViewerEvent возвращает "null"
А как, извините, обновиться?
Эта версия в компании со времён, я так понял, покупки.
Update
Залили на боевой последний билд триальной версии. Проблема не исчезла. Все то же самое, только в ответе теперь не "null", а совсем пусто) Вернулись в 2015й)
Windows Server 2008 R2 Enterprise, соответственно IIS 7.5. В такой конфигурации 4 машины.
Тут, честно говоря, даже не знаю какая информация вам еще может быть полезной.
Ну и к чему пришли:
в ответ на viewerEvent получаем null тогда, когда запрос обрабатывает не та машина, которая строила этот отчет. Ну просто потому что построившая этот отчет машина его закэшировала, а другие машины о нем без понятия. Соответственно CacheMode = StiServerCacheMode.None проблему решает, но тратит лишнее время на построение отчета "при каждом клике".
Как в целом в Stimulsoft решался этот вопрос?
В идеале какой-нибудь распределенный кэш использовать. Мы-то можем, но библиотека-то явно нет.
В итоге весь вопрос сводится к следующему :
Есть способ в ViewerEvent подсовывать объект сформированного отчета? И еще бы сразу после формирования объекта отчета перехватить бы его...
Мы этот отчет в кэш запихаем. А при обработке viewerEvent возьмем из запроса guid отчета, возьмем отчет из кэша и делов-то
Или можно какой-нибудь cacheProvider прикрутить к созданию отчетов?
Заранее благодарю за ответ.
Эта версия в компании со времён, я так понял, покупки.
Update
Залили на боевой последний билд триальной версии. Проблема не исчезла. Все то же самое, только в ответе теперь не "null", а совсем пусто) Вернулись в 2015й)
Windows Server 2008 R2 Enterprise, соответственно IIS 7.5. В такой конфигурации 4 машины.
Тут, честно говоря, даже не знаю какая информация вам еще может быть полезной.
Ну и к чему пришли:
в ответ на viewerEvent получаем null тогда, когда запрос обрабатывает не та машина, которая строила этот отчет. Ну просто потому что построившая этот отчет машина его закэшировала, а другие машины о нем без понятия. Соответственно CacheMode = StiServerCacheMode.None проблему решает, но тратит лишнее время на построение отчета "при каждом клике".
Как в целом в Stimulsoft решался этот вопрос?
В идеале какой-нибудь распределенный кэш использовать. Мы-то можем, но библиотека-то явно нет.
В итоге весь вопрос сводится к следующему :
Есть способ в ViewerEvent подсовывать объект сформированного отчета? И еще бы сразу после формирования объекта отчета перехватить бы его...
Мы этот отчет в кэш запихаем. А при обработке viewerEvent возьмем из запроса guid отчета, возьмем отчет из кэша и делов-то
Или можно какой-нибудь cacheProvider прикрутить к созданию отчетов?
Заранее благодарю за ответ.
Re: ViewerEvent возвращает "null"
Здравсвтуйте, Сергей.
Вы можете использовать свой кэш. Вот примерный код в событии GetReportSnapshot
ViewerEvent
Спасибо.
Вы можете использовать свой кэш. Вот примерный код в событии GetReportSnapshot
Код: Выделить всё
report.Render(false);
// кладёте отчёт в свой кэш
return StiMvcViewer.GetReportSnapshotResult(report);
Код: Выделить всё
// берёте отчёт из своего кэша
return StiMvcViewer.ViewerEventResult(report);
Re: ViewerEvent возвращает "null"
Благодарю!
Пара небольших уточнений:
в ViewerEvent приходит два гуида: reportGuid и clientGuid. По всей видимости, для однозначной идентификации отчета в кэше нужно использовать их оба? Или достаточно clientGuid? Учитывая, что есть множество разных отчетов, каждый из которых могут просматривать множество пользователей с различными данными.
В случае, если объект отчета уже удален из кеша, в стандартной схеме в viewerEvent он формируется заново. Скажите, пожалуйста, каким образом? вызывается GetReportSnapshot исходя из пришедших в ViewerEvent routeValues?
Пара небольших уточнений:
в ViewerEvent приходит два гуида: reportGuid и clientGuid. По всей видимости, для однозначной идентификации отчета в кэше нужно использовать их оба? Или достаточно clientGuid? Учитывая, что есть множество разных отчетов, каждый из которых могут просматривать множество пользователей с различными данными.
В случае, если объект отчета уже удален из кеша, в стандартной схеме в viewerEvent он формируется заново. Скажите, пожалуйста, каким образом? вызывается GetReportSnapshot исходя из пришедших в ViewerEvent routeValues?
Re: ViewerEvent возвращает "null"
Здравсвуйте, Сергей.
Лучше, конечто проверять оба Guid, но будет и достаточно использовать clientGuid.
Вы правы, если отчёт не найдён в кэше (например, при переключении страниц), то вьюверу возвращается "null" ответ, и он сам инициирует GetReportSnapshot действие с параметрами текущего отчета.
Спасибо.
Лучше, конечто проверять оба Guid, но будет и достаточно использовать clientGuid.
Вы правы, если отчёт не найдён в кэше (например, при переключении страниц), то вьюверу возвращается "null" ответ, и он сам инициирует GetReportSnapshot действие с параметрами текущего отчета.
Спасибо.
Re: ViewerEvent возвращает "null"
Спасибо.
Re: ViewerEvent возвращает "null"
Здравствуйте.
Мы всегда рады вам помочь.
Обращайтесь, если ещё нужна будет помощь.
Спасибо.
Мы всегда рады вам помочь.
Обращайтесь, если ещё нужна будет помощь.
Спасибо.