ASP.NET C#中的静态变量更改值

Mao*_*roy -2 c# asp.net static webforms

我在使用C#的ASP.NET中有一个静态变量的问题.我在webform中声明变量.

public partial class Logueado_Movimientos : System.Web.UI.Page
{
   static List<ExchangeItems> theList;

   protected void Page_Load(object sender, EventArgs e)
   {
      if (IsPostback) return;
      theList = GetListValues();
   }
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我们测试了网站,没有发现问题,部署了它......但是在生产环境中发生了一些奇怪的事情.这个网站每天都在使用,只有两次,情况已经发生.

ExchangeItems有一个ID属性,它返回数据库中每个要交换的项的id.页面加载时只调用一次GetListValues()方法.之后,用户可以通过单击GridView中的复选框选择要交换的项目,进行进一步的验证,然后有一个"打印并保存"按钮,使用iTextSharp打印到PDF并将状态发送回数据库.

在所有验证之后,该项目已在生产中更改两次.例如,项目180是正在交换的项目,但是当打印和保存文档时,结果是项目103是处理的项目.所有先前的验证都将ID设置为180.项目103甚至不在列表中.

现在,检查数据库(SQL Server),我们发现项目103在项目180后10分钟保存.我们使用GetDate()函数来存储日期和时间.此外,他们被两个不同的用户分配给不同的客户.

用户可能需要10分钟来处理请求,有时他们会与客户通话.这意味着user1正在使用项目180,而user2正在使用项目103,两者都使用相同的模块/ webform.由于变量是静态的,两个用户是否可能正在影响彼此的信息?我现在宣称它是"私人静态",只是出于偏执,但还有什么我不知道的吗?

注意:变量是静态的,因为如果没有声明,则回发会丢失它的值.它不在Session变量中,因为它仅用于该模块/ webform,而不是其他地方.

D S*_*ley 6

由于变量是静态的,两个用户是否可能正在影响彼此的信息?

是 - 静态变量在会话间共享.私有化不会改变这一点.一种选择可能是使用会话变量

Session["theList"] = GetListValues();
Run Code Online (Sandbox Code Playgroud)

它不在Session变量中,因为它仅用于该模块/ webform,而不是其他地方.

所以?拥有整个应用程序未使用的会话数据没有任何问题.