【发布时间】:2011-11-01 07:24:34
【问题描述】:
我已经开发了一个带有报告模块的基于 C# AJAX 的系统,因为更复杂的报告需要大约 30 秒才能运行,所以我已经构建了一个并行 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 的下图显示它工作正常 - 初始报告生成请求和随后的进度检查。
此代码最初使用开发 Web 浏览器在 Visual Studio 2010 中运行良好,但在五次左右的报告请求后停止运行。部署到生产环境时(使用 Windows 2003、IIS6、.net 4.0)会显示相同的行为,显示前几次尝试的报告生成进度,然后无法处理后续请求。
当此问题开始发生时使用 Firebug 检查 AJAX 调用我可以看到,在主要 AJAX 调用(生成报告)完成之前,用于检查进度的 AJAX 调用不会完成。
对进度检查器 AJAX 方法的异步调用问题发生在我的开发机器和生产环境中。网站运行一段时间后,它似乎停止工作。
对我来说,这表明某些事情没有得到整理,导致它停止工作。在生产环境中回收应用程序池后,它会再次开始工作一段时间。
【问题讨论】:
-
在 Firefox 中运行前五次,你说?我想知道if that's a coincidence or not... 你的客户端 Ajax 调用是什么样的?您是否在重复相同的 XMLHttpRequest?
-
@matt-gibson 我在 IE、Chrome 和 Firefox 中得到了相同的结果。适用于要生成的前 5 个左右的报告。之后进度不会更新,因为在生成报告之前进度调用不会完成。一次只触发一个进度调用,它会等到完成调用后再进行另一个调用。
-
我认为stackoverflow.com/questions/4428413/… 可能不相关,但似乎不相关
标签: c# ajax jquery .net-4.0 iis-6