我已经开发了一个基于C#和AJAX的系统,其中包括一个报告模块。由于生成更复杂的报告需要约30秒钟的时间,因此我已经建立了一个并行的AJAX调用,以报告报告生成的进度。
报告生成器
在报告开始时,我会在缓存中创建一个项目。
当报告生成完毕后,它将从缓存中移除。
这样客户端可以计算报表生成的进度并更新进度条。下面来自Firebug的图像显示其正常工作,包括初始报表生成请求和后续的进度检查。
这段代码一开始可以在Visual Studio 2010中使用开发Web浏览器正常运行,但是在五次或更多的报告请求之后停止工作。当部署到生产环境中(使用Windows 2003、IIS6、.net 4.0)时,会出现相同的情况,最初几次尝试显示报表生成进度,然后再进行进一步的请求时就不起作用了。
当出现这个问题时,使用Firebug检查AJAX调用,我发现检查进度所做的AJAX调用直到主AJAX调用(生成报表)完成之前都没有完成。
异步调用进度检查器AJAX方法时出现的问题在我的开发机器和生产环境中都存在。看起来它在网站运行一段时间后就停止工作。
对我来说,这表明在进行后续操作时没有清理某些内容,从而导致停止工作。在生产环境上应用程序池被回收后,它将再次开始工作一段时间。
在报告开始时,我会在缓存中创建一个项目。
HttpContext.Current.Cache.Insert(appProgressName, new JSON.ReportProgress(), null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration );
然后在报告生成过程中定期更新
((JSON.ReportProgress)HttpContext.Current.Cache[appProgressName]).TimesheetsProcessed++;
当报告生成完毕后,它将从缓存中移除。
HttpContext.Current.Cache.Remove(appProgressName);
报告进度检查器
然后,在浏览器中每隔几秒就会运行一个AJAX调用,该调用在服务器上调用以下Web方法。
[WebMethod]
public static JSON.ReportProgress ReportProgress()
{
string appProgressName = User.CurrentId() + "_ReportProgress";
if ( HttpContext.Current.Cache[appProgressName] != null )
{
return (eServices.SIBSv2.JSON.ReportProgress)HttpContext.Current.Cache[appProgressName];
}
return null;
}
这样客户端可以计算报表生成的进度并更新进度条。下面来自Firebug的图像显示其正常工作,包括初始报表生成请求和后续的进度检查。
这段代码一开始可以在Visual Studio 2010中使用开发Web浏览器正常运行,但是在五次或更多的报告请求之后停止工作。当部署到生产环境中(使用Windows 2003、IIS6、.net 4.0)时,会出现相同的情况,最初几次尝试显示报表生成进度,然后再进行进一步的请求时就不起作用了。
当出现这个问题时,使用Firebug检查AJAX调用,我发现检查进度所做的AJAX调用直到主AJAX调用(生成报表)完成之前都没有完成。
异步调用进度检查器AJAX方法时出现的问题在我的开发机器和生产环境中都存在。看起来它在网站运行一段时间后就停止工作。
对我来说,这表明在进行后续操作时没有清理某些内容,从而导致停止工作。在生产环境上应用程序池被回收后,它将再次开始工作一段时间。