会话状态SQLServer在asp.net中删除静态变量

时间:2015-03-31 14:46:58

标签: c# asp.net sql-server

今天我不得不将我的项目从Default inProc“升级”到SQLServer会话状态。当我完成转换时,我的代码中的一个方法停止正常工作。它是一个调用静态List var的方法,首先是count,然后是value,它在每个页面上调用它(Master页面的一部分)。到目前为止,它工作得很好,输出值和持久性,但现在,在登录并设置会话状态变量后不久,静态变量将被删除,我得到空指针异常。

由于他们在他们自己的班级中,我设法找到了一个解决方案,将他们移动到他们被调用的页面,但最初可能会导致这个问题。

总而言之,静态列表字符串变量在创建之后不久就会被删除和清空(与以前完全正常工作相反),这与我实现SQLServer作为会话Staste(与以前使用inproc相反)相关联。

感谢。

编辑:

GetTabs(静态变量所在的位置)是:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class GetTabs
{


    public static List<string> listLbl;
    public static List<string> listHead;
    public static string log_idd;
    public static string accesss;
    int i = 0;

    DbConn dbc = new DbConn();


    public void ReturnTabs(int log_id, int access)
    {
        dbc.StoredProcedureTOReturnTabsNames(log_id, access, out listLbl, out listHead);

    }
    public void ReturnTabsMobile(int log_id, int access)
    {
        dbc.StoredProcedureTOReturnTabsNamesForMobiles(log_id, access, out listLbl, out listHead);

    }


}

这是在GetTabs.listLbl [x]的另一个类中调用的...... 现在我将变量和方法移动到该类,并简单地删除了“GetTabs”。从我的其他方法。

即使该类在某种程度上不正确,它在我更改会话变量模式之前工作得很好。

EDIT2:数据库,这两种方法绘制的数据与我用于会话状态的方法不同。

EDIT3:在我将静态变量移动到调用类后,它们看起来像这样:

public class Functions : System.Web.UI.Page
{ ...
  public void method1(Panel pnn)
{
    ReturnTabs(CheckUser.user_id, CheckUser.user_access);
    int i = listLbl.Count;
    for (int n = 0; n < i; n++)
    {
        LinkButton l = new LinkButton();
        Label lbl = new Label();
        l.ID = "lb" + n;

        l.CommandArgument = n.ToString();
        l.Command += Do_Something;



        lbl.Text = listLbl[n];// +"  " + GetTabs.log_idd + "   " + GetTabs.accesss; //GetTabs.listHead[n];
        Panel pnl = new Panel();

依此类推,创建并放置以编程方式生成的标题菜单的按钮。

在我的主人身上使用主人面板调用onLoad。

1 个答案:

答案 0 :(得分:1)

这是非常错误的。静态类成员由进程中的所有线程共享。您可能同时为不同的用户(并行线程)多次调用dbc.StoredProcedureTOReturnTabsNames,[重新]多次分配listLbllistHead

listLbllistHead的内容是否取决于CheckUser.user_idCheckUser.user_access?这两个是静态的吗?