我是asp.net mvc的新手,我开始使用VS 2013 + IIS Express开发应用程序。我在Session_start()
中使用global.asax
来调用单个/多个对象,这会执行一些SQL查询。我确实想要为每个用户会话初始化此对象一次,因此我将其保存到会话中并每次检查它是否已存在。
public static SingletonObject Instance{
get {
string name = "so_set";
if (HttpContext.Current.Session[name] == null)
HttpContext.Current.Session[name] = new SingletonObject ();
return (SingletonObject)HttpContext.Current.Session[name];
}
}
我在http://samcogan.com/singleton-per-asp-net-session/
找到了此代码当我使用Internet Explorer进行调试时,没关系,因为每次关闭选项卡VS都会停止调试。但是当我使用Firefox时,关闭选项卡并不会停止调试过程,我必须在Visual Studio中手动停止它。通常我只是打开选项卡并停止VS中的调试,但是当我再次启动调试过程时,会打开一个新选项卡 - 这会导致奇怪的行为。这一次以某种方式"恢复"旧的选项卡和这个单例实现也不能正常工作。它将调用私有构造函数两次 - 我将一些控制台输出添加到私有构造函数中以使其清楚:
time: 04.02.44.008993
time: 04.02.44.009992
sessionID: l1dh4dghgk2urlpk3wu5xfmf
sessionID: l1dh4dghgk2urlpk3wu5xfmf
每个"被遗忘"选项卡会生成其他呼叫。我正在使用
检查sessionID
HttpContext.Session.SessionID
即使我在Session_Start
的第一行中向当前会话写入内容并在调用构造函数之前检查它,它仍然设法进入内部 - 它以某种方式开始多次使用相同的sessionID
(但在任务管理器中仍然只能看到一个工作进程)。任何想法如何解决这一问题?
问候
马丁