.net关于session的stateserver问题,急急急!!!!

wozuozhu52p 2012-06-12 10:17:20
“/Xjxhis”应用程序中的服务器错误。
--------------------------------------------------------------------------------

无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。]





...全文
330 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wozuozhu52p 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yeness 的回复:]

1 楼的方法,可以,好象是你把一个对象存储到了 session 或者 viewstate 才造成的这个错误。
[/Quote]
好像没有啊,我在自己本地创建的项目里面运行不会出错,放到公司服务器上的时候就会有这个错误,发现公司的webconfig里面配置了:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" stateNetworkTimeout="2000" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" timeout="2000"/>
而本地的则没有,又不敢乱改,这到底是什么原因呀!我用reportview做的水晶报表出现的错误...
wuyq11 2012-06-12
  • 打赏
  • 举报
回复
优化查询,分页获取看看
xuan.ye 2012-06-12
  • 打赏
  • 举报
回复
1 楼的方法,可以,好象是你把一个对象存储到了 session 或者 viewstate 才造成的这个错误。
wozuozhu52p 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 krzg2008 的回复:]

试试将对象序列化 [Serializable]
[/Quote]

只有查询数据比较多的时候才报错,问题关键会不会是[OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。],刚遇到的这种问题,还请赐教呀!
krzg2008 2012-06-12
  • 打赏
  • 举报
回复
试试将对象序列化 [Serializable]
xuan.ye 2012-06-12
  • 打赏
  • 举报
回复

你说的我明白,但是你现在两个地方都绑定了数据

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="500px" Width="100%" Visible="False">
<LocalReport ReportPath="xx.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1"
Name="tb_xx" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetData"
TypeName="tb_xxTableAdapters.tb_xxTableAdapter">
</asp:ObjectDataSource>

注意DataSourceId,你要确定到底是后台那个绑定算数,还是前台的这个数据控件,然后。。。
wozuozhu52p 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yeness 的回复:]

另外就是你怎么绑定这么多数据源? 前台也绑定,后台还绑定?
[/Quote]

session["mc"]里面存的就是一个类似用户名的东东,我试了一下,就算不用session,换成一个常量也还是会报错。
我说一下我做的思路,首先是见一个xsd数据集,然后新建一个rdlc页面并选择xsd为数据源,然后在前台reportview控件绑定到rdlc页面。

非常感谢你的回答!!
xuan.ye 2012-06-12
  • 打赏
  • 举报
回复
另外就是你怎么绑定这么多数据源? 前台也绑定,后台还绑定?
xuan.ye 2012-06-12
  • 打赏
  • 举报
回复
ReportParameter mc = new ReportParameter("mc", session["mc"].tostring());

可能是这句话 session["mc"],不知道你里面存的什么

string sql = "select * from table1 where mc='"+session["mc"].tostring()+"'";
SqlConnection myConn = new SqlConnection("Data Source=ww;Initial Catalog=test;User ID=sa;Password=123");
SqlDataAdapter myda = new SqlDataAdapter(sql, myConn);
DataSet myds = new DataSet();
myConn.Open();
myda.Fill(myds);
myConn.Close();

ReportViewer1.Visible = true;

////////ReportParameter mc = new ReportParameter("mc", session["mc"].tostring());
////////ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { mc });

ReportDataSource rds = new ReportDataSource("tb_xx", myds.Tables[0]);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();

这样试一下吧
wozuozhu52p 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yeness 的回复:]

你可能得把你的出错代码贴出来看看了
[/Quote]

前台就一个报表控件和一个查询按钮
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" 
Font-Size="8pt" Height="500px" Width="100%" Visible="False">
<LocalReport ReportPath="xx.rdlc">
<DataSources>
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1"
Name="tb_xx" />
</DataSources>
</LocalReport>
</rsweb:ReportViewer>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetData"
TypeName="tb_xxTableAdapters.tb_xxTableAdapter">
</asp:ObjectDataSource>


后台查询事件:
string sql = "select * from table1";
SqlConnection myConn = new SqlConnection("Data Source=ww;Initial Catalog=test;User ID=sa;Password=123");
SqlDataAdapter myda = new SqlDataAdapter(sql, myConn);
DataSet myds = new DataSet();
myConn.Open();
myda.Fill(myds);
myConn.Close();

ReportViewer1.Visible = true;

ReportParameter mc = new ReportParameter("mc", session["mc"].tostring());
ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { mc });

ReportDataSource rds = new ReportDataSource("tb_xx", myds.Tables[0]);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();

xuan.ye 2012-06-12
  • 打赏
  • 举报
回复
你可能得把你的出错代码贴出来看看了
wozuozhu52p 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yeness 的回复:]

引用 5 楼 的回复:

引用 3 楼 yeness 的回复:

1 楼的方法,可以,好象是你把一个对象存储到了 session 或者 viewstate 才造成的这个错误。

好像没有啊,我在自己本地创建的项目里面运行不会出错,放到公司服务器上的时候就会有这个错误,发现公司的webconfig里面配置了:
<sessionState mode="StateServer" sta……
[/Quote]
你好,我按你说在本地webconfig里面添加了那段代码,也开启了asp.net状态服务,结果是查询数据量不多的时候可以正常执行,数据过多的话就报错:

无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection 的值,确保服务器接受远程请求。如果服务器位于本地计算机上,并且上面提到的注册表值不存在或者设置为 0,则状态服务器连接字符串必须使用“localhost”或“127.0.0.1”作为服务器名称。
这是为什么呀?

nihao
xuan.ye 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 3 楼 yeness 的回复:

1 楼的方法,可以,好象是你把一个对象存储到了 session 或者 viewstate 才造成的这个错误。

好像没有啊,我在自己本地创建的项目里面运行不会出错,放到公司服务器上的时候就会有这个错误,发现公司的webconfig里面配置了:
<sessionState mode="StateServer" stateConnectionStri……
[/Quote]
1、首先开启你的服务器,右键我的电脑->服务->asp.net 状态服务。
2、赋值上面的webconfig 的配置信息到你的 web.config。
3、在本机调试。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧