我正在構建一個Javascript應用程序,並且eash用戶有一個單獨的UserSession。該應用程序進行了一堆Ajax調用。每個Ajax調用都需要訪問用戶的單個UserSession對象。同步訪問ASP.NET會話的成員
每個Ajax調用都需要一個UserSession對象。
UserSession對象中的數據對每個用戶都是唯一的。
本來,每個Ajax調用期間,我將創建一個新UserSession對象和它的數據成員被存儲在ASP.NET會話。但是,我發現UserSession對象正在被實例化。爲了最大限度地減少UserSession對象的構造,我將它封裝在Singleton模式中,並對其進行同步訪問。
我相信同步發生在應用程序範圍內,但我只需要它發生在每個用戶。我在這裏看到一篇文章說ASP.NET緩存是同步的,但是創建對象並將其插入到緩存中的時間另一個線程可以開始構建另一個對象並將其插入緩存。
這是我目前正在同步訪問對象的方式。有沒有比使用「鎖定」更好的方法...應該鎖定HttpContext.Session對象?
private static object SessionLock = new object();
public static WebSession GetSession
{
get
{
lock (SessionLock)
{
try
{
var context = HttpContext.Current;
WebSession result = null;
if (context.Session["MySession"] == null)
{
result = new WebSession(context);
context.Session["MySession"] = result;
}
else
{
result = (WebSession)context.Session["MySession"];
}
return result;
}
catch (Exception ex)
{
ex.Handle();
return null;
}
}
}
}
爲什麼你需要一個單例模式?您已經在使用直接映射到您自己的會話對象的作用域/使用的會話狀態對象。 – kervin 2010-04-26 17:44:57
我希望同一個用戶同時有多個請求。 – Sam 2010-04-26 19:03:53