Проблема
Использование SSRS по умолчанию Report.aspx и webconfig, state1 и state2 (ниже) равны.
Мой пользовательский файл report.aspx с изменениями в webconfig, state1 и state2 ниже не совпадают. равный.
Вероятная причина
Информация о сеансе может не сохраняться из-за изменения параметров веб-конфигурации..?
Это становится видимым, когда я просматриваю отчеты, а затем использую кнопку возврата в браузере.
Конкретный сценарий:
- Открытый отчет (имеет параметры/фильтры, например, год: 2012)
- Изменить значения фильтра по умолчанию, например. установить год на 2011 (+отправить) [ = state1 ]
- Перейти к подробному отчету
- Вернуться назад (год снова установлен на 2012) [ = state2 ]
При использовании SSRS по умолчанию report.aspx возврат (шаг 4) — это 2012 год, как и ожидалось. Однако с моим пользовательским aspx webconfig + ReportViewer фильтры отличаются от предыдущих (снова 2011 г.).
Мои изменения в web.config для обхода ранее обнаруженной ошибки:
Тип Microsoft.ReportingServices.UI.WebControlConnection, ReportingServicesWebUserInterface, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 не реализует IReportServerConnection
В web.config теперь есть:
<appSettings>
<add key="ReportViewerServerConnection" value="Microsoft.ReportingServices.UI.WebControlConnection, ReportingServicesWebUserInterface, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
<add key="ReportViewerTemporaryStorage" value="Microsoft.ReportingServices.UI.ReportViewerTemporaryStorage, ReportingServicesWebUserInterface, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
<clear/><!-- added -->
</appSettings>
Чтобы обойти ошибку:
В удаленном режиме элемент управления Report Viewer требует, чтобы состояние сеанса было включено или информация о соединении с сервером отчетов была указана в файле конфигурации.
Я изменился:
<httpModules>
<clear />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/><!-- added -->
...
...
</httpModules>
Буду рад получить ваши мысли и/или предложения/решения.
Обновление:
Дополнительные скриншоты к предыдущим шагам:
Шаг 1 (= Шаг 4 настраиваемый)
Шаг 2 (= шаг 4 по умолчанию, желательно)
Шаг 4: возвращение к ssrs по умолчанию дает мне шаг 2 (по желанию), с моим пользовательским дает мне шаг 1. Я хотел бы вернуться к шагу 2 также с моей пользовательской страницей.
Обновление
Исследование с помощью WebkitInspector
В ssrs по умолчанию aspx, возвращаясь в браузере (желаемая функциональность):
Изначально фильтры также находятся в состоянии по умолчанию, но сервер прописывает на странице дополнительный JS, который инициирует обновление фильтров до предыдущих настроек. Дело в том, что я не знаю, как «автоматически» писать эти дополнительные JS (я думаю, что это связано с сеансом/историей, а не с программным сохранением и проверкой истории).
Далее мне было предложено:
- используйте панели инструментов разработчика или fiddler/wireshark для исследования параметров сеанса.
- запрос ReportServerTempDb
Я попробую № 1, хотя я действительно не уверен, с чего начать № 2.
Обновление:
По-видимому, только в IE есть некоторый BrowserNavigationCorrector.js. Когда вы визуализируете страницу, сначала выполняется инициализация, которая выполняет setTimeout('doInitialize',0)
. После этого - перед выполнением doInitialize - страница пишет/отрисовывает JS: add_init(*NavigationCorrectioncode*);
В doInit NavigationCorrector проверяет PageState (в OnAppLoad()
), который еще НЕ имеет значение "Загружено". Затем происходит все остальное, и состояние страницы получает значение Loaded.
Затем, когда вы переходите к подотчету и нажимаете ответ, страница имеет в памяти состояние «Загружено». Поэтому, когда NavigationCorrector выполняет свой код, а состояние страницы IS Loaded, он запускает скрипт TriggerPostBack. Это, в свою очередь, выполняет обратный вызов, который обновляет значения параметров.
При использовании WebForms.dll v11 BrowserNavigationCorrector.js не существует. Кроме того, при использовании Chrome он также не включен ни в собственный SSRS, ни в dll.
В принципе, я могу попытаться включить этот файл вручную, или в настоящее время я пытаюсь загрузить VS2013, который, надеюсь, имеет улучшенную версию dll, может быть, v12 ..?