0

ページに複数のajax呼び出しがあります。簡潔にするために、それらをA、B、Cと呼びましょう。「A」はサーバーからデータを取得するのに2分ほどかかります(2分で大丈夫です)。一方、「B」と「C」の応答時間はミリ秒単位です。

何らかの理由で、AJAX呼び出しは「A」の後にキューに入れられています。IE 9は、同じドメインに対して同時に6つの要求接続を持つことができます。以下のスクリーンショットで同時接続を確認できます。

「A」は2分かかり、「A」が完了するまで「B」と「C」は保留状態になります。

「ajax_threads.js」http://cmarshall.net/MySoftware/ajax/Threads/を見つけましたが、これが役立つかどうかはわかりません。私が「ajax_threads.js」を理解した方法は、それが複数の接続を提供するだけであり、その機能はすでにmodrenブラウザーにあるということです。IE7には2つの接続がありました。

最初のajax呼び出しは保留中

これがJavascriptです:

    $(function () {  $.ajax({
            type: "POST",
            url: "Service1.svc/GetDate",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            success: function (msg) {
                // Replace the div's content with the page method's return.
                $("#Result1").text(msg.d);
            }
        });


        $.ajax({
            type: "POST",
            url: "Service1.svc/GetDate2",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            success: function (msg) {
                // Replace the div's content with the page method's return.
                $("#Result2").text(msg.d);
            }
        });   }); 

HTML:

  <input type="button" id="Button1" value="1"/><div id="Result1"></div>
  <br/><input type="button" id="Button2" value="2"/><div id="Result2"></div>

サーバーコード:(Ajax対応のWCF)

     [ServiceContract(Namespace = "")]
     [AspNetCompatibilityRequirements(RequirementsMode =  
     AspNetCompatibilityRequirementsMode.Allowed)]
     public class Service1
{
    [OperationContract]
    public string GetDate()
    {
        System.Threading.Thread.Sleep(8000);
        return DateTime.Now.ToString();
    }

    [OperationContract]
    public string GetDate2()
    {
        System.Threading.Thread.Sleep(1000);
        return DateTime.Now.ToString();
    }     
}
4

2 に答える 2

2

サーバーで ASP.NET セッションを使用していると思います。これは、Sessions を使用する場合の標準的な症状です。その理由は非常に単純で、ASP.NET セッションの設計に起因します。スレッドセーフではありません。したがって、ASP.NET が行うことは、単純にアクセスをロックすることです。この結果、同じセッションから並列リクエストを実行することはできません。それらは、あなたがそれを観察しているのとまったく同じように、単にキューに入れられます.

これを解決する最善の方法は、この恐ろしい ASP.NET セッションを単純に取り除くことです。プロジェクトの開発者がそれを使用するという間違いを犯さないようにするために、web.config に入れることができるものは次のとおりです。

<system.web>
    <sessionState mode="Off" />
    ...
</system.web>
于 2013-02-19T22:20:41.513 に答える
0

この問題に対処する簡単な方法はありません。オンラインでいくつかのオプションを試しました。しかし、最善の解決策は、ASP.NET の新機能「ASP.NET WEBAPI」を使用することです。

幸運を!

于 2013-02-21T17:19:56.077 に答える