我有一个带有 1 个标签和 2 个按钮的网页。一个按钮执行回发,生成一个随机数字序列,将其保存到 Application 对象,并调用从 Application 对象获取列表并将它们写入标签的方法。另一个按钮只是调用获取数字并将它们写入标签的方法。在页面加载时,我调用相同的函数来获取值并将它们写入标签。
我在本地运行该网站,同时使用 3 个浏览器(IE、FF、Chrome),它按预期工作。每个浏览器显示相同的值,如果其中一个调用 Randomize,它们会发生变化。
在生产服务器上我得到不同的值,有时我在 IE 或 FF 上没有任何值。
我们没有负载均衡器。
代码,它看起来很难看,但我拼命尝试了每一种组合,只是为了让它工作:
protected void Page_Load(object sender, EventArgs e)
{
show();
}
private List<int> AllNums
{
get
{
List<int> list = new List<int>();
try
{
list = (List<int>)Application["Nums"];
}
catch
{
list = new List<int>();
}
if (list == null)
list = new List<int>();
return list;
}
}
protected void btnRandomize_Click(object sender, EventArgs e)
{
Random r = new Random();
int i = r.Next(5, 15);
List<int> list = new List<int>();
for (int k = 0; k < i; k++)
list.Add(r.Next(0, 100));
Application.Lock();
Application["Nums"] = list;
Application.UnLock();
show();
}
private void show()
{
StringBuilder sb = new StringBuilder();
foreach (int o in AllNums)
sb.AppendLine(o.ToString());
lblSession.Text = sb.ToString();
}