好的,经过一番摆弄,我终于确定了我一直遇到的问题。
我有一个网站,在初始化时会初始化不同的对象并用数据填充它们。这包括不同页面上的数据集和自定义控制器。这个问题似乎在所有页面上都不一致地影响我的网站。
我会处理我最详细的错误。我有一个评论页面,人们可以在其中动态创建评论框和一个填充数据的下拉列表。在初始加载时,仅创建一个评论框。当您单击一个按钮时,会发生回发,另一个按钮将被加载到包含所有评论框的列表中,并且将显示附加评论框。
现在这工作正常, ispostback = true 并且列表的计数加一。这一切都托管在 iis 下的 windows 2012 服务器上。该网站通过 sql server 设置会话,会话限制为 20 分钟。该网站还使用持续一个月的 cookie 来包含一些元数据。现在,如果我等待 5 分钟左右(我在网页上保持不活动状态),然后再次点击按钮,有时会发生加载需要一段时间,ispostback 将是真的,它会进入 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 寿命为 1 个月,会话超时设置为 30 分钟。
会话状态设置是sql server,
连接字符串在下面(稍作修改)
Server=tcp:90210.database.windows.net,1433;Database=USState;用户 ID=Pirates;Password=Boats;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;
超时 30 秒,连接重试间隔 0,启用自定义数据库被选中。
Cookie 设置模式:使用 Cookie 名称: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]);
}