0

IHttpAsyncHandler を実装しました。そのハンドラーへのウィジェットを持つ Web ページから約 5 つの異なる AJAX 呼び出しを行っています。

これらのウィジェットの 1 つは (データベース クエリが大きいため) ロードに約 15 秒かかりますが、他のウィジェットはすべて 1 秒以内にロードされるはずです。ハンドラーは同期的に応答しています。

非常に一貫性のない結果が得られます。ProcessRequest メソッドは、Session およびその他のクラス レベルの変数を使用しています。それにより、異なるリクエストがそれぞれが所有する代わりに同じスレッドを使用する可能性がありますか?

私はこれを取得しています...

Request1 ---> 応答 1 秒
Request2 ---> 応答 14 秒
Request3 ---> 応答 14.5 秒
Request4 ---> 応答 15 秒
Request5 ---> 応答 15.5 秒

しかし、私はこのようなものをもっと探しています...

Request1 ---> 応答 1 秒
Request2 ---> 応答 14 秒
Request3 ---> 応答 1.5 秒
Request4 ---> 応答 2 秒
Request5 ---> 応答 1.5 秒

あまりにも多くのコードを投稿しなくても、私の IHttpAsyncHandler メソッドの実装はかなり標準的です。

private AsyncProcessorDelegate _Delegate;

protected delegate void AsyncProcessorDelegate(HttpContext context); 

IAsyncResult IHttpAsyncHandler.BeginProcessRequest(HttpContext context, 
    AsyncCallback cb, object extraData)
{
    _Delegate = new AsyncProcessorDelegate(ProcessRequest);

    return _Delegate.BeginInvoke(context, cb, extraData); 
}

void IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
{
    _Delegate.EndInvoke(result); 
}

IHttpAsyncHandler.BeginProcessRequest メソッドにデバッグ ブレーク ポイントを配置すると、最後の Process が完了するまでメソッドが起動されないことがわかります。

また、私の machine.config にはこのエントリがあります... processModel autoConfig="true" 他のプロパティは設定されていません。

このようにハンドラーを呼び出しています...
$.ajax( { type: "GET", url: "../HTML/HtmlHandler.ashx", cache: true, dataType: "text", data: { html: name }, success: function(html) { //$(function() { //console.log(tabname); //console.log("msg:" + msg); $("#" + name + " holder").html(html); //checkAllLoaded(); ClientHome_init(''); //}); },

    error: function(XMLHttpRequest, textStatus, errorThrown) {
    $("#" + name + "holder").html("<span>Error retrieving widget.</span>");
        //console.log("error:" + tabname);
        //checkAllLoaded();
    }
}

他に何を確認する必要がありますか?

4

2 に答える 2

3

他の誰かがこの問題を抱えている場合に備えて、 IRequiresSessionState を IReadOnlySessionState に変更すると、問題が解決しました。

于 2010-03-29T16:23:47.200 に答える
-1

ここでの問題は、おそらくサーバーコードではありません。javascriptの性質は、同期していることです。非同期のAJAXリクエストを使用している場合でも、JavaScriptで2つのHTTPリクエストを同時に作成できることはめったにありません。

于 2010-03-26T19:43:09.717 に答える