0

WEB API サービスからの集計カウントを要求する jQuery AJAX 呼び出しがあります。WEB API は要求を処理し、ストアド プロシージャ (SQL サーバー) を呼び出して要求パラメーターを渡します。ストアド プロシージャに時間がかかります (要求の処理に 10 分以上かかります)。ストアド プロシージャに 10 分以上かかる場合、jQuery AJAX 呼び出しは、ステータス コード 12002 または 12152 の不明なエラーを報告しています (これらのエラーは接続の問題に関連しています)。 Web サーバーは 10 分後にストアド プロシージャから結果を受け取ります. 問題が発生しているブラウザは IE8.0 , IE9.0, firefox ですが、chrome は 10 分以上待っても応答を受信して​​います. 保持する解決策はありますか?サーバーとクライアントの間の通信は有効です.接続要求ヘッダーを ajax から "close","open" に変更してみました 、「キープアライブ」何も機能しません。助けてください。

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;
        }
4

1 に答える 1

1

ブラウザには組み込みの内部タイムアウトがあり、これが影響している可能性があります。詳細については、この StackOverflow の質問を参照してください: Browser Timeouts

他の人が言っているように、AJAX の応答を 10 分間待つのは非常に悪いことであり、ほとんどのブラウザーは、AJAX タイムアウトを非常に高く設定したとしても、おそらくデフォルト設定でタイムアウトになるでしょう。これがうまくいくとは思えません。

他の人が言ったように実行してクエリを実行し、結果へのリンクをユーザーに送信できます。ただし、別の解決策は、x 分ごとに cron でクエリを実行し、結果をキャッシュすることです。このようにして、ユーザーはオンデマンドで結果を表示でき、新しい URL を待つ必要も、長時間待つ必要もありません。

于 2013-02-08T20:44:53.117 に答える