我有jQuery AJAX調用請求從WEB API服務進行彙總計數。 WEB API處理請求並調用傳遞請求參數的存儲過程(sql server)。存儲過程需要更長的時間(超過10分鐘來處理請求,如果存儲過程需要超過10分鐘,jQuery AJAX調用報告狀態碼爲12002或12152的未知錯誤(這些錯誤與連接問題有關),但Web Server在10分鐘後收到存儲過程的結果,IE8.0,IE9.0,firefox出現問題,但即使等待10分鐘以上,Chrome仍然收到響應。是否有解決方案服務器和客戶端之間的通信是活躍的我已經嘗試將連接請求頭從ajax更改爲「關閉」,「打開」,「保持活動」,沒有任何效果。請幫我解決。長時間運行jQuery Ajax調用
Java腳本代碼。
$.ajax({
type: "post",
url: URLPrefix + 'api/querydispatcher/summary',
data: s,
success: function (data) {
window.clearInterval(int);
$('#wait').hide();
$('#CancelSummary').hide();
$('#backgroundmodal').hide();
$("#tResultTotals").slideDown('slow');
DeserializeJSon(eval(data));
if (!CancelSummaryRequest) {
CancelSummaryRequest = true;
$('#DownloadDetailedReport').show();
}
else {
$('#tResultTotals').hide();
}
},
$('#wait').hide();
$('#CancelSummary').hide();
$('#backgroundmodal').hide();
error_Dialog(request.responseText);
}
});
}
Server Side (WEB API) code.
[WebInvoke(UriTemplate = "summary", Method = "POST")]
public List<QueryResult> GetSummaryReport_Queue(JsonValue SummaryXML)
{
MyContext db = new MyContext();
DateTime StartTime = DateTime.Now;
string sumXML = SummaryXML["XMLJson"].ToString().Replace(@"\", "").Replace(@"""", "");
//These are two codes created by JSon @ the end of the String that need to be trim off.
sumXML = sumXML.Replace("u000du000a", "");
List<QueryResult> results = null;
XElement xxml = XElement.Parse(sumXML);
string ReportID = xxml.Descendants("ReportId").FirstOrDefault().Value;
string err = "";
try
{
results = db.fnReportResult(sumXML).ToList();
}
catch (Exception e)
{
err = e.Message + " : "+(e.InnerException!=null?e.InnerException.Message : "");
throw e;
}
finally {
///--- Record Audit Info.
double RunningTime = DateTime.Now.Subtract(StartTime).TotalMilliseconds;
string parameters = "ApplicationType:Query_Dispatcher" + "||User:" + SummaryXML["UserId"].ToString().Replace(@"\", "").Replace(@"""", "") +
"||Session:" + SummaryXML["Session"].ToString().Replace(@"\", "").Replace(@"""", "") +
"||Running Time:" + RunningTime.ToString() + "||Request Type:Summary Report" +
"||Report ID:" + ReportID +
"||Error:" + err;
Audit SaveAudit = new Audit();
SaveAudit.WriteAudit("Query_Builder", parameters);
//####-Recording Audit Info
}
return results;
}
我不會讓連接等待10分鐘 - 我會向'/ whatever'發出'POST' req,它會立即用'202 Accepted'和正在創建的資源的URL來響應。 '/不管/ hashOfSomething'。然後在10分鐘後訪問該URL - 如果資源已準備就緒,則可以使用它,否則在重試之後N分鐘。 – moonwave99 2013-02-08 15:17:11
我該如何重新訪問客戶端的URL(/ whatever /)以檢查記錄是否已被處理? – user1569110 2013-02-08 15:51:48
有一個「超時」選項的Ajax調用 - 你有沒有試過將其設置爲高於600000毫秒? – marty 2013-02-08 15:58:51