Почему встроенные отчеты не загружаются после длительного периода входа в систему? - PullRequest
0 голосов
/ 12 апреля 2019

Я работаю над приложением ASP.NET MVC, которое использует PowerBI Embedded для отображения некоторых отчетов.Я начал с приложения из учебного пособия и не внес никаких изменений в код, отображающий отчет.Однако я обновил все пакеты nuget до последних версий.

В общем, приложение работает нормально и отчеты отображаются правильно.Однако иногда я сталкиваюсь с проблемой, когда все отчеты перестают загружаться, и у меня появляется только мигающий логотип Power BI.

Если я открываю новый сеанс браузера в режиме инкогнито и захожу на того же пользователя, все работаетснова хорошо.Однако в исходной вкладке он не работает, пока я не закрою все или не сброслю кэш.

Я заметил, что это всегда происходит после того, как я вошел в систему в течение более длительного периода времени (возможно, 30-60 минут),Мое лучшее предположение состояло в том, что с токенами что-то не так, но я не могу отследить его.

Есть какие-нибудь намеки, что может быть причиной этого?

ОБНОВЛЕНИЕ: Я только что заметил, что после более длительногоПериод времени логотип перестает мигать, и я получаю сообщение об ошибке «Этот контент недоступен».Когда я смотрю в консоль браузера, я получаю это:

wabi-west-europe-b-primary-redirect.analysis.windows.net/explore/reports/fcbf92f1-f8d7-4c61-aeb3-06f195835413/modelsAndExploration?preferReadOnlySession=true:1 Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR
reportEmbed.min.js:1 ERROR Error: Uncaught (in promise): Object: {"message":"LoadReportFailed","detailedMessage":"Get report failed","level":6,"technicalDetails":{"requestId":"6d99f480-0f1c-47d0-9598-cab569018dd0"}}
    at A (reportEmbed.min.js:1)
    at A (reportEmbed.min.js:1)
    at reportEmbed.min.js:1
    at e.invokeTask (reportEmbed.min.js:1)
    at Object.onInvokeTask (reportEmbed.min.js:1)
    at e.invokeTask (reportEmbed.min.js:1)
    at t.runTask (reportEmbed.min.js:1)
    at g (reportEmbed.min.js:1)
    at t.invokeTask (reportEmbed.min.js:1)
    at i.useG.invoke (reportEmbed.min.js:1)
Ye @ reportEmbed.min.js:1

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Это происходит из-за того, что embedToken , который вы используете для извлечения панели мониторинга из API остальных powerBi, истекает примерно через 1 час.
Необходимо обновить токен новым, прежде чем истечет токен, иэто не обрабатывается автоматически из API Microsoft (насколько я знаю).
Вы должны использовать токен аутентификации , полученный ранее, и запрашивать новый embedToken .Учтите, что также токен аутентификации истекает через некоторое время, если это произойдет, вы должны получить новый до запроса нового токена embed .
Вы можете сделать это повторно.ведение журнала с помощью user / pass или, что еще лучше, с использованием токена обновления , который API дает вам при аутентификации (при аутентификации вы получаете токен авторизации и обновлениетокен , который вы можете использовать для запроса свежего аутентификационного токена без повторной регистрации с проходом пользователя).
Некоторая документация по Azure об аутентификации для использования ресурса Azure.
Обновление :
Учтите также, что в полученном объекте embedToken есть дата истечения срока действия , которую можно использовать для обновления токена до истечения срока его действия. вот несколько документов из лазурного

1 голос
/ 18 апреля 2019

Проблема была, как правильно указано EttoreP , вызванной токеном с истекшим сроком действия.Однако основным виновником было кеширование.Мое приложение не является одностраничным приложением, поэтому токен должен быть получен при каждой загрузке страницы.Оказалось, что результаты кэшировались дольше срока действия токена.После повторного запуска страницы через час она использовала кэшированный токен и вызывала ошибки.Добавление атрибута OutputCache к контроллеру решило проблему.Спасибо за помощь и хорошие советы!

 [OutputCache(NoStore = true, Duration = 0)]
0 голосов
/ 12 апреля 2019

Это происходит потому, что ваша реализация, хороший ETL может решить вашу проблему, но проверьте ваше соединение и реализацию тайм-аута кэша.

...