好的,所以经过一番摆弄后我终于发现了一个我一直存在的问题。
我有一个网站,在初始化时初始化不同的对象并用数据填充它们。这包括数据集和不同页面上的自定义控制器。此问题似乎在所有页面上不一致地影响我的网站。
我会回答我最详细的错误。我有一个评论页面,一个人可以动态创建评论框和一个填充数据的下拉列表。在初始加载时,仅创建一个注释框。当您单击按钮时,会发生回发,另一个按钮将被加载到包含所有注释框的列表中,并且将显示另外的注释框。
现在这个工作正常,ispostback = true并且列表的计数加1。这些都托管在iis下的Windows 2012服务器上。该网站通过SQL Server设置为会话,会话限制为20分钟。该网站还使用持续一个月的cookie来包含一些元数据。现在,如果我等待5分钟左右(我在网页上保持不活动状态),并再次按下按钮,有时会发生加载需要一段时间,ispostback将为true,它将进入addbuttonclick方法并开始将下一个注释框添加到列表中,它会将注释框的先前数据加载到新的注释框中,这就是错误的地方。注释控件列表以某种方式被清除,并且当我收到错误时计数为1.意味着服务器...随机清除了注释列表。
类似的问题也困扰着我的其他页面,尽管更多的数据集被清除了。任何帮助将不胜感激。
页面加载初始化
if (!IsPostBack)
{
DataSet BudgetCodes = new DataSet();
BudgetCodes = WFlowWS.GetBudgetCodes();
commentControl.Clear();
//intialize comment control
this.CommentControl1.Ds = BudgetCodes;
this.CommentControl1.FillBudgetCode(this.CommentControl1.Ds);
if (commentControl.Count == 0)
{
commentControl.Add(this.CommentControl1);
}
}
btnaddadditionalComment点击
protected void btnAddAdditionalCom_Click(object sender, EventArgs e)
{
try
{
try
{
commentControl.Add(LoadControl("~/WorkflowCommentControl.ascx") as WorkflowCommentControl);
}
catch (Exception exl)
{
Response.Write(exl.ToString() + "line 1");
Response.End();
}
try
{
Response.Write("ISPOSTBACK " + IsPostBack.ToString() + " COMMENT CONTROL COUNT : " + commentControl.Count().ToString() + " ");
commentControl[commentControl.Count() - 1].Ds = commentControl[(commentControl.Count() - 2)].Ds;
}
catch (Exception exl)
{
Response.Write(exl.ToString() + "line 2");
Response.End();
}
try
{
commentControl[commentControl.Count() - 1].FillBudgetCode(commentControl[commentControl.Count() - 2].Ds);
}
catch (Exception exl)
{
Response.Write(exl.ToString() + "line 3");
Response.End();
}
try
{
this.PanelComment.Controls.Add(new LiteralControl("<br/>"));
}
catch (Exception exl)
{
Response.Write(exl.ToString() + "line 4");
Response.End();
}
try
{
this.PanelComment.Controls.Add(commentControl[commentControl.Count() - 1]);
}
catch (Exception exl)
{
Response.Write(exl.ToString() + "line 5");
Response.End();
}
}
catch (Exception exl)
{
Response.Write(exl.ToString() + "line 6");
Response.End();
}
}
Cookie生命为一个月,会话超时设置为30分钟。
会话状态设置是sql server,
连接字符串在下面(稍加修改)
Server = tcp:90210.database.windows.net,1433; Database = USState; User ID = Pirates; Password = Boats; Trusted_Connection = False; Encrypt = True; Connection Timeout = 30;
超时30秒,连接重试间隔0,启用自定义数据库。
Cookie设置 模式:使用Cookies 名称:ASP.NET_SessionId 超时:20
使用托管身份进行模拟检查
应用程序池的基本IIS设置是
.Net Framework v4.0.30319 托管管道模式:集成 立即启动应用程序池已勾选
加载每个评论控件的页面加载结束时的代码
for (int x = 1; x < commentControl.Count; x++)
{
this.PanelComment.Controls.Add(new LiteralControl("<br/>"));
this.PanelComment.Controls.Add(commentControl[x]);
}
答案 0 :(得分:1)
听起来你的会话超时变量可能太低了。由于内存使用或其他问题,您的应用程序池也可能正在回收;你能告诉我们你的应用程序池上的IIS设置是否可以回收?
答案 1 :(得分:0)
如果要动态地将UserControl添加到网页,则需要在每次加载页面时执行此操作。它忘记了(或更准确地说,永远不知道)关于页面的先前状态。