Страница 1 из 1

ViewerEvent возвращает "null"

Добавлено: 29 июл 2016, 13:19
SergeyFS
Добрый день.

Используем 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"

Добавлено: 29 июл 2016, 16:11
HighAley
Здравствуйте, Сергей.

Уточните, пожалуйста, какую версию нашего продукта вы используете.

Спасибо.

Re: ViewerEvent возвращает "null"

Добавлено: 29 июл 2016, 17:05
SergeyFS
Version: 2015.2 from 30 September 2015
:)

Re: ViewerEvent возвращает "null"

Добавлено: 01 авг 2016, 11:05
HighAley
Здравствуйте, Сергей.

Возможно данная проблема уже решена. Попробуйте обновиться до последнего билда.
Если проблема всё ещё возникает. Нам необходима более подробная информаия о конфигурации вашего сервера, которая позволит нам воспроизвести проблему.

Спасибо.

Re: ViewerEvent возвращает "null"

Добавлено: 01 авг 2016, 12:47
SergeyFS
А как, извините, обновиться? :D

Эта версия в компании со времён, я так понял, покупки.

Update
Залили на боевой последний билд триальной версии. Проблема не исчезла. Все то же самое, только в ответе теперь не "null", а совсем пусто) Вернулись в 2015й)

Windows Server 2008 R2 Enterprise, соответственно IIS 7.5. В такой конфигурации 4 машины.
Тут, честно говоря, даже не знаю какая информация вам еще может быть полезной.

Ну и к чему пришли:
в ответ на viewerEvent получаем null тогда, когда запрос обрабатывает не та машина, которая строила этот отчет. Ну просто потому что построившая этот отчет машина его закэшировала, а другие машины о нем без понятия. Соответственно CacheMode = StiServerCacheMode.None проблему решает, но тратит лишнее время на построение отчета "при каждом клике".
Как в целом в Stimulsoft решался этот вопрос?

В идеале какой-нибудь распределенный кэш использовать. Мы-то можем, но библиотека-то явно нет.
В итоге весь вопрос сводится к следующему :) :
Есть способ в ViewerEvent подсовывать объект сформированного отчета? И еще бы сразу после формирования объекта отчета перехватить бы его...
Мы этот отчет в кэш запихаем. А при обработке viewerEvent возьмем из запроса guid отчета, возьмем отчет из кэша и делов-то :D :D :D
Или можно какой-нибудь cacheProvider прикрутить к созданию отчетов?

Заранее благодарю за ответ.

Re: ViewerEvent возвращает "null"

Добавлено: 02 авг 2016, 18:12
HighAley
Здравсвтуйте, Сергей.

Вы можете использовать свой кэш. Вот примерный код в событии GetReportSnapshot

Код: Выделить всё

report.Render(false);
// кладёте отчёт в свой кэш
return StiMvcViewer.GetReportSnapshotResult(report);
ViewerEvent

Код: Выделить всё

// берёте отчёт из своего кэша
return StiMvcViewer.ViewerEventResult(report);
Спасибо.

Re: ViewerEvent возвращает "null"

Добавлено: 03 авг 2016, 09:47
SergeyFS
Благодарю!

Пара небольших уточнений:

в ViewerEvent приходит два гуида: reportGuid и clientGuid. По всей видимости, для однозначной идентификации отчета в кэше нужно использовать их оба? Или достаточно clientGuid? Учитывая, что есть множество разных отчетов, каждый из которых могут просматривать множество пользователей с различными данными.

В случае, если объект отчета уже удален из кеша, в стандартной схеме в viewerEvent он формируется заново. Скажите, пожалуйста, каким образом? вызывается GetReportSnapshot исходя из пришедших в ViewerEvent routeValues?

Re: ViewerEvent возвращает "null"

Добавлено: 03 авг 2016, 17:22
HighAley
Здравсвуйте, Сергей.

Лучше, конечто проверять оба Guid, но будет и достаточно использовать clientGuid.

Вы правы, если отчёт не найдён в кэше (например, при переключении страниц), то вьюверу возвращается "null" ответ, и он сам инициирует GetReportSnapshot действие с параметрами текущего отчета.

Спасибо.

Re: ViewerEvent возвращает "null"

Добавлено: 03 авг 2016, 18:19
SergeyFS
Спасибо.

Re: ViewerEvent возвращает "null"

Добавлено: 04 авг 2016, 10:59
HighAley
Здравствуйте.

Мы всегда рады вам помочь.
Обращайтесь, если ещё нужна будет помощь.

Спасибо.