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();
}
}
他に何を確認する必要がありますか?