应用程序对象在传递服务器上丢失数据

本文关键字:数据 服务器 对象 应用程序 | 更新日期: 2023-09-27 18:33:33

我正在 ASP.NET 2.0(C#(中开发Webapp。我有问题要解决问题。

应用程序应在线显示用户,并且仅对管理员应显示用户名。我正在使用 Application[] 对象来存储用户和计数,在 Globall.asax 文件中设置值。

在下面的代码中,我将显示相对于计数器的部分:

   protected void Application_Start(object sender, EventArgs e){
            Application["OnlineCounter"] = 0; 
    }
    protected void Session_Start(Object sender, EventArgs e){
            // Code that runs when a new session is started
            if (Application["OnlineCounter"] != null){
                Application.Lock();
                Application["OnlineCounter"] = ((int)Application["OnlineCounter"]) + 1;
                Application.UnLock();
            }
    }
    protected void Session_End(Object sender, EventArgs e){
            // Code that runs when a new session is started
            if (Application["OnlineCounter"] != null){
                Application.Lock();
                Application["OnlineCounter"] = ((int)Application["OnlineCounter"]) - 1;
                Application.UnLock();
            }
    }

在我的本地机器上使用此代码,我可以正确计算在线用户。相反,当我在服务器(Windows 2003 Server 和 IIS6(上发布此代码时,我发现了以下问题:从我的机器访问 3 个不同的用户(使用不同的浏览器(,我将在单个页面中只看到 1 个用户(在每个浏览器中我只看到 1 个在线用户(!

这有一些问题吗?任何建议不胜感激。感谢

应用程序对象在传递服务器上丢失数据

可以使用性能计数器来获取该数字。

此处有 ASP.NET 的性能计数器列表。在"ASP.NET 应用程序性能计数器"下查找"会话活动"的说明。

然后,可以使用性能计数器类为应用程序获取该性能计数器的值。

问题是这需要特权:

若要在 Windows Vista、Windows XP Professional x64 Edition 或 Windows Server 2003 中读取性能计数器,您必须是性能监视器用户组的成员或具有管理权限。

执行此操作的一种方法是模拟应用程序的一部分,由具有这些权限的用户运行。它可以是 .asmx Web 服务,也可以是将显示所需信息的 Web 表单本身。只能使用 web.config 中的位置和标识模拟该服务。设置具有所需权限的用户并模拟该用户。

服务器是否配置为为每个应用程序池使用多个工作进程?

ASP.NET 状态管理建议:http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

应用程序

范围:应用程序状态的范围也可以是 缺点。存储在应用程序状态中的变量仅是全局的 应用程序正在运行的特定进程,以及每个进程 应用程序进程可以有不同的值。因此,您不能 依靠应用程序状态来存储唯一值或更新全局 Web 园和 Web 场服务器配置中的计数器。

使用 IIS 6.0 配置 Web 园:https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/659f2e2c-a58b-4770-833b-df96cabe569e.mspx?mfr=true