[英]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.