Asp.net2.0部分global.asxs文件
    void Application_Start(object sender, EventArgs e) 
    {        //计数器初始化
        Application.Lock();     //临界变量,使用加锁功能,其他用户不能访问
        Application["TotalCount"] = 0;
        Application.UnLock();
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码    }
        
    void Session_Start(object sender, EventArgs e) 
    {
        //计数器加1
        Application.UnLock();
        Application["TotalCount"] = Int32.Parse(
            Application["TotalCount"].ToString()) + 1;
        Application.UnLock();
        
        if (Session["CurrentCount"] != null)
        {
            //记录网站的当前访问人数
            Session["CurrentCount"] = Int32.Parse(
                Session["CurrentCount"].ToString()) + 1;
        }
        else
        {
            //计数器初始化
            Session["CurrentCount"] = 1;
        }    }    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer,则不会引发该事件。
        
        //访问人数减一
        Application.Lock();
        Application["TotalCount"] = Int32.Parse(
            Application["TotalCount"].ToString()) - 1;
        Application.UnLock();
    }
       
相应.cs文件
if( !Page.IsPostBack )
        {
            if ( Session["CurrentCount"] != null)
            {
                //获取网站当前人数
                LBCurrentNum.Text = Session["CurrentCount"].ToString();
            }            if (Application["TotalCount"] != null)
            {
                //获取网站当前人数
                LBTotalNum.Text = Application["TotalCount"].ToString();
            }
        }
        
问题如下:
1.msdn中没有Application["TotalCount"],Session["CurrentCount"]这两个属性,程序里也没定义,不知哪里来的
2.调试时,f5弹出窗体,然后关闭(只是关闭窗口),程序并未进入Session_End,导致每次再次按f5调试时,在线总人数始终在增长
3.global.asxs中没有:Application_Beginrequest函数和Application_End函数

解决方案 »

  1.   

    1.Application["TotalCount"],Session["CurrentCount"]不是属性。而是通过Application和Session定义的两个变量。用来统计总在线人数和当前在线人数。
    2.因为你在Session_End()里面减的是Application["TotalCount"],即总人数。
    3.一般不会出现这样的情况。你重新建一个项目试试看。
      

  2.   


    是啊。因为这两个对像存储的的位置不同呀,一个是在硬盘中存储,一个是在内存中存储的区别呀。。session 是把值存到硬盘中的呀。 退出程序时是不进行会释放的,只能手动释放。。application 是在内存中存储。退出程序时就会自动释放只要你能明白这两个区别就一切OK了
      

  3.   

    对于一楼的回复
    1.既然两个是自定义变量,那为何没有相关声明
    2.Session_End中的写法的确有错误,不过更大的问题在于,在该函数处设置了断点,而为何程序没有进入该函数。
    谢谢!