Session_Start и ASP.Net Async SessionState Module - PullRequest
0 голосов
/ 29 ноября 2018

Недавно мы интегрировали ASP.Net Async SessionState Module и начали видеть исключения null ref в нашем обработчике событий Global.asax Session_Start.

Я не могу реплицировать его локально, иПохоже, что это происходит не все время вживую, но я считаю, что это когда мы пытаемся получить доступ к HttpContext.Current в Session_Start.Я предполагаю, что HttpContext.Current иногда равен нулю, потому что инициализация сеанса асинхронна.

Есть предложения о том, как обратиться?

1 Ответ

0 голосов
/ 07 декабря 2018

Возможно, ответ слишком прост, но я также видел это время от времени, и я бы посоветовал вам защитить свой код внутри события Session_Start, например

if (HttpContext.Current !== null)
{
    // do your actions with the Current object
}
else
{
    // possibly add some logging here to see what's going on
}

Если вы заметилиэто просто условие гонки, ваш код будет реагировать правильно, а не просто попадать в исключение NullReferenceException.

Защитить его так, как в данном конкретном случае, лучше, чем добавлять операторы Элвиса (?.) везде, где вы находитесьссылка на него, потому что это приведет к более сложным сценариям для тестирования / устранения неполадок.В других случаях, однако, этот оператор весьма полезен, например, в этом другом контексте.

Кроме того, в ссылке, которую вы указали, Я видел подсказку "Чтобы реализовать свой собственный асинхронный поставщик сессионного состояния, который работает с Microsoft.AspNet.SessionState.SessionStateModule, все, что вам нужно сделать, - это реализовать конкретный класс SessionStateStoreProviderAsyncBase, который включен в пакет NuGet Microsoft.AspNet.SessionState.SessionStateModule."

Может быть, вам просто нужно реализовать этот класс, а не использовать Session_Start - потому что здесь всегда есть HttpContext, заданный в качестве параметра, а Session_Start просто для обратной совместимости?

...