我正在使用带有C#的ASP.Net 3.5,开发ID:Visual Studio 2008.当我使用
时Session["FileName1"] = "text1.txt"
它工作正常,但后来我正在使用
number1=17;
string FileName1="FileName1" + number1.toString();
然后用
设置Session[FileName1]="text1.txt";
给我运行时错误
会话状态信息无效且可能已损坏 在System.Web.SessionState.SessionStateItemCollection.Deserializer(BinaryReader reader)
当我在Session
变量中使用字符串时,有人能解决我的问题吗?请记住,它适用于我的开发机器(意味着本地Visual Studio),但是当部署到服务器时,它会提供错误。
答案 0 :(得分:5)
在尝试通过Session [FileName1]语法访问它之前,确保FileName1变量不为null ...
这是指向遇到同样问题的其他人的链接: http://forums.asp.net/t/1069600.aspx
这是他的答案:
在代码中,我找到了以下行:
//some code
Session.Add(sessionVarName, sessionVarValue);
//some other code
显然,由于一些脏数据,有一段时间 sessionVarName为null。
Session.Add在这种情况下不会抛出任何异常,如果你的话 会话模式是" InProc",没有问题。但是,如果你的 在会话反序列化期间,会话模式是" SQLServer" 商店,你会得到我的例外。所以,过滤掉脏 数据,我修改了代码成为:
if (sessionVarName != null)
{
//somecode
Session.Add(sessionVarName, sessionVarValue);
//some other code
}
答案 1 :(得分:2)
您的错误原因是
xyz = new Guid() is also xyz= Guid.Empty;
所以当你尝试转换为字符串时,它会抛出错误。
只需修改类似的代码即可。
Guid guId = System.Guid.NewGuid();
string x = guId .ToString();
string FileName1="text1.txt" + x;
Session[FileName1]="text1.txt";
答案 2 :(得分:0)
在将它们存储在会话中之前检查您的值,它们可能会在会话存储的反序列化过程中导致此异常,过滤您的数据。 查看Here
if(!string.IsNullOrEmpty(FileName1))
{
Session.Add(FileName1, "text1.txt");
}
或检查字符串中的无效字符。
答案 3 :(得分:-1)
您可以将值添加到会话中这样
string FileName1="FileName1" + number1.toString();
if(!string.IsNullOrEmpty(FileName1))
{
Session.Add(FileName1, "text1.txt");
}