今天,我不得不将我的项目从默认inProc“升级”为SQLServer会话状态。当我完成转换时,代码中的某个方法停止正常工作。它是一种调用静态List var的方法,首先调用count,然后调用值,并在每个页面(Master页面的一部分)上调用它。直到现在,它工作得很好,输出值和持久化,但现在,在登录并设置会话状态变量之后不久,静态变量将被擦除,并且我得到空指针异常。会话状态SQLServer删除asp.net中的静态变量
由于他们在他们自己的班级,我设法找到一个解决方案,通过将他们移动到他们被称为的页面,但首先可能会导致此问题。
总而言之,静态列表字符串变量在创建后不久就会被清除并清零(与以前完美无缺的工作相反),并且这与我实现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在我的大师与主人面板。
将您的变量更改为属性,并在setter中添加一个断点,条件为value == null。另外,你的静态变量标记为线程静态? – Guillaume 2015-03-31 14:55:00
很神秘。静态类成员和会话或会话状态模式之间没有连接。我们不知道当Session切换到SQL Server时,您的代码会使静态变量[s]变为空。 – Igor 2015-03-31 14:55:16
你会发布代码太多,你可以发布它最初是什么,你已经将代码更改为.. – MethodMan 2015-03-31 14:58:52