Недавно я попытался использовать веб-часть Report Viewer на странице SharePoint. Отчеты использовались вне SharePoint в течение многих лет. Мы в настоящее время на SSRS 2008 R2 нативный режим и SharePoint 2007. Через некоторое время, когда вы идете на страницу с веб-частями, вы просто получите ошибку:Использование веб-части средства просмотра отчетов SharePoint: ошибка при получении данных сеанса: недопустимый или истекший сеанс: xxxxxxxxxxx
The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found. (rsExecutionNotFound)
и в SSRS вас в журнал получить:
library!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: , An error occurred within the report server database. This may be due to a connection failure, timeout or low disk condition within the database.;
session!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Error in getting session data: Invalid or Expired Session: yoty4kmgk3hjr5uup1ng0a45
session!ReportServer_0-33!13bc!10/28/2013-11:09:45:: i INFO: LoadSnapshot: Item with session: yoty4kmgk3hjr5uup1ng0a45, reportPath: , userName: DOMAIN\USER not found in the database
library!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ExecutionNotFoundException: , Microsoft.ReportingServices.Diagnostics.Utilities.ExecutionNotFoundException: The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found.;
library!ReportServer_0-33!f84!10/28/2013-11:09:45:: i INFO: RenderForNewSession('/PATH/REPORT')
Теперь я точно знаю, что это такое. Мы получаем это все время. Когда вы запускаете отчет, SSRS принимает временный снимок и связывает его с вашим сеансом, а затем отображает снимок в браузер. Если вы разрешите отчету сидеть в браузере достаточно долго, время сеанса и временный снимок будут уничтожены. Если вы вернетесь и попытаетесь взаимодействовать с отчетом, вы получите эту ошибку, потому что сеанс исчез. Когда это происходит в браузере, вы можете просто вернуться к диспетчеру отчетов и повторно запустить отчет, чтобы получить новый сеанс и моментальный снимок.
Сейчас моя творческая команда работает над макетом и дизайном SharePoint. Они работают, по крайней мере, с тремя страницами примеров, каждый из которых содержит те же два отчета SSRS в экземпляре веб-части Report Viewer. Отчеты обычно отображаются при первоначальном размещении на странице. Однако, после того, как SSRS закончит сеанс, веб-часть покажет, что сеанс не найден. Каждая страница устанавливает другой сеанс для одного и того же отчета, поэтому будет открыто несколько сеансов, и отчет будет отображаться на одной странице после того, как он начнет показывать ошибку на другой.
Сообщение абсолютно верно, сессия не существует. Сеансы временны, с таймаутом 600 секунд. Это ожидаемое поведение. Итак, почему экземпляр веб-части на странице все еще держится на мертвой сессии? Если вы перейдете от страницы, а затем вернитесь или обновите страницу, почему веб-часть просмотра отчетов SharePoint не будет выполнять отчет и получить новый идентификатор выполнения? Является ли веб-часть недостаточно интеллектуальной, чтобы знать, что происходит? Есть ли ожидание времени жизни экземпляра, которое не выполняется?
Итак, вопрос в том, как мы можем хорошо себя вести в веб-части SSRS SharePoint? В контексте SharePoint пользователь должен иметь возможность открывать страницу и взаимодействовать с содержимым на ней, не осознавая, откуда идет контент или как он туда попадает, опыт должен быть бесшовным и прозрачным. В этом случае веб-часть кэширует сеанс на сервере SharePoint [я думаю], поэтому, когда SSRS убивает сеанс, представление в SharePoint просто выводит ошибку, и мы не нашли способ обновить его.
Есть ли способ решить эту проблему?