由於更復雜的報告需要大約30秒的時間才能運行,我開發了一個基於C#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);
報告進度檢查
再有就是它每隔幾秒鐘運行在調用服務器上的以下Web方法瀏覽器的AJAX調用。
[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中,但經過五年左右的報告請求停止工作。當部署到生產(使用Windows 2003,IIS6,.net 4.0)時,會顯示相同的行爲,顯示前幾次嘗試的報告生成進度,然後無法處理其他請求。
當此問題開始發生時使用Firebug檢查AJAX調用我可以看到,在主AJAX調用(生成報告)完成之前,用於檢查進度的AJAX調用沒有完成。
問題與進度檢查器AJAX方法的異步調用發生在我的開發機器和生產環境。它在網站運行一段時間後似乎停止工作。
對我而言,這表明有些事情沒有得到整理,導致它停止工作。在生產應用程序池回收後,它將再次開始工作一段時間。
在Firefox的前五次作品中,你說?我懷疑[如果這是巧合或不...](http://stackoverflow.com/questions/561046/how-many-concurrent-ajax-xmlhttprequest-requests-are-allowed-in-popular-browser)什麼是你的客戶端Ajax調用看起來像?你是否在使用相同的XMLHttpRequest? –
@ matt-gibson我在IE,Chrome和Firefox中獲得了相同的結果。適用於生成前5個左右的報告。之後,進度不會更新,因爲進度調用直到生成報告之後纔會完成。同時只有一個進度調用被觸發,它會一直等到它完成調用之後再進行調用。 –
我以爲也許http://stackoverflow.com/questions/4428413/why-would-multiple-simultaneous-ajax-calls-to-the-same-asp-net-mvc-action-cause-t/4434805#4434805 wasn沒有關係,但似乎不是 –