IIS Express单例会话处理

时间:2016-08-30 14:15:52

标签: c# asp.net asp.net-mvc session iis-express

我是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 (但在任务管理器中仍然只能看到一个工作进程)。任何想法如何解决这一问题?

问候
马丁

0 个答案:

没有答案