我在ASP.NET 2.0(C#)中开发webapp。我有问题解决问题。
应用程序应该在线显示用户,并且只有管理员才能显示用户名。我正在使用Application []对象来存储usermame和count,在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个在线用户)!
这有一些问题吗?任何建议表示赞赏。 感谢名单
答案 0 :(得分:1)
您可以使用性能计数器来获取该数字。
这里有performance counters for ASP.NET的列表。在“ASP.NET应用程序性能计数器”下查找“Sessions Active”的描述。
然后,您可以使用PerformanceCounter class为您的应用程序获取该性能计数器的值。
问题是这需要特权:
要在Windows Vista,Windows XP Professional x64 Edition或Windows Server 2003中读取性能计数器,您必须是Performance Monitor Users组的成员或具有管理权限。
执行此操作的一种方法是模拟应用程序的一部分由具有这些权限的用户运行。它可以是.asmx Web服务,也可以是Web表单本身,它将显示所需的信息。您只能在web.config中使用location和identity impersonate来模拟该服务。设置具有所需权限的用户并模拟该用户。
答案 1 :(得分:0)
服务器是否配置为每个应用程序池使用多个工作进程?
ASP.NET状态管理建议:http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx
应用范围:应用范围的状态也可以是 坏处。存储在应用程序状态中的变量仅为全局变量 应用程序运行的特定进程,以及每个进程 申请流程可以有不同的价值观。 因此,你不能 依赖于应用程序状态来存储唯一值或更新全局值 Web园和Web场服务器配置中的计数器。
使用IIS 6.0配置Web Gardens:https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/659f2e2c-a58b-4770-833b-df96cabe569e.mspx?mfr=true