Почему Page.PreviousPage timedout, это sessionState timeout или что-то еще? - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь выяснить, почему следующий код не прошел проверку null, и через некоторое время выдает исключение, и мне еще предстоит определить причину тайм-аута, которая, по-моему, и является причиной того, что я получил сообщение об исключении, обычно это происходит утром следующего дня или после обеденного перерыва. Но я все еще не могу надежно воспроизвести проблему.

var prePage = Page.PreviousPage as BasePage;

if (prePage != null)
{
   PageSessionField = prePage.PageSessionField;
}
else
{
   throw new Exception("Null previous page session exception.");
}

мое первое предположение: sessionState timeout:

<sessionState cookieless="UseCookies" mode="InProc" timeout="20" useHostingIdentity="false" />

Но я попытался изменить значение timeout на например, минимальное число 1, но оно в большинстве случаев не выдает исключение, как ожидалось.

В противном случае настройки пула приложений в IIS: настройки времени ожидания и перезапуска выглядят нормально для меня.

IIS Application pool config section

Обновление:

  1. Мне удалось повторить проблему, подождав 30 минут и возвращается и обновляет sh страницу и получает исключение, вызванное Page.PreviousPage: null.

  2. Похоже, что тайм-аут вызван кодом Owin, которые с использованием аутентификации Cook ie.

  3. Похоже, что что-то делать с истекшим токеном AD FS, см. мой ответ для собранных мною доказательств.

1 Ответ

0 голосов
/ 22 апреля 2020

Я думаю, что это из-за того, что токен ADFS, который мы используем для аутентификации, истек, и после того, как он истек, наш веб-сайт будет запрашивать другой токен и после перенаправления с сервера ADFS во время процесса повторной аутентификации, PreviousPage теряется, так как это по существу перенаправление, а не передача с сервера.

Я могу подтвердить это, взглянув на оболочку TokenLifeTime execute power на сервере ADFS:

Get-AdfsRelyingPartyTrust -Name "relying_party"

И Я получил это: enter image description here

Видимо 0 означает 60 минут.

И мне также удалось захватить сеанс Fiddler с ответом токена с сервера ADFS :

&lt;wsu:Expires xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot;>2020-04-21T01:50:36.830Z&lt;/wsu:Expires>

Через час после создания токена.

Я даже играю, чтобы уменьшить TokentLifetime до 5 минут или что-то еще, используя:

Set-ADFSRelyingPartyTrust -Targetname "relying_party" -TokenLifetime 5

Это сократит время ожидания до 5 минут, как и ожидалось.

Но я все еще не могу воспроизвести проблему 100% времени.

Обновление: позже я нашел эту ссылку: так что три времени ожидания Работа только на сервере ADFS может повлиять на время ожидания, с которым я столкнулся

...