簡體   English   中英

Session_Start和ASP.Net異步SessionState模塊

[英]Session_Start and ASP.Net Async SessionState Module

我們最近集成了ASP.Net Async SessionState模塊 ,並開始在Global.asax Session_Start事件處理程序中看到null ref異常。

我無法在本地復制它,並且它似乎並非一直都在實時發生,但是我相信這是當我們嘗試在Session_Start中訪問HttpContext.Current時。 我的猜測是HttpContext.Current有時為null,因為Session初始化是異步的。

關於如何解決有什么建議嗎?

也許答案太簡單了,但我有時也會看到這種情況,建議您像這樣在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。

在這種特殊情況下,像這樣保護它比在您引用它的任何地方添加Elvis運算符( ?. )更好,因為這將導致測試/故障排除的情況更加復雜。 但是,在其他情況下,例如在不同的上下文中 ,此運算符非常有用

此外,在您提供的鏈接中,我看到了提示“要實現與Microsoft.AspNet.SessionState.SessionStateModule一起使用的自己的異步sessionstate提供程序,您所需要做的就是實現一個具體的SessionStateStoreProviderAsyncBase類,該類包含在Microsoft中。 AspNet.SessionState.SessionStateModule NuGet程序包。”

也許您只需要實現該類而不是使用Session_Start-因為這里總是將HttpContext作為參數提供,而Session_Start只是為了向后兼容?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM