Я реализовал IHttpAsyncHandler. Я делаю около 5 различных вызовов AJAX с веб-страницы с виджетами для этого обработчика.
Один из этих виджетов загружается за 15 секунд (из-за большого запроса к базе данных), остальные должны загрузиться менее чем за секунду. Обработчик отвечает синхронно.
Я получаю очень противоречивые результаты. Метод ProcessRequest использует Session и другие переменные уровня класса. Может ли это быть причиной того, что разные запросы используют один и тот же поток вместо каждого собственного?
Я получаю это ...
Запрос1 ---> Ответ 1 сек
Запрос2 ---> Ответ 14 сек
Запрос3 ---> Ответ 14,5 сек
Request4 ---> ответ 15 сек
Запрос5 ---> Ответ 15,5 сек
но я ищу что-то еще подобное ...
Запрос1 ---> Ответ 1 сек
Запрос2 ---> Ответ 14 сек
Запрос3 ---> Ответ 1,5 сек
Request4 ---> ответ 2 сек
Запрос5 ---> Ответ 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, я вижу, что метод не запускается до тех пор, пока не завершится последний процесс.
Также мой machine.config имеет эту запись ...
processModel autoConfig = "true" без других установленных свойств.
Я вызываю обработчик вот так ...
$ .Ajax (
{
тип: "GET",
URL: "../HTML/HtmlHandler.ashx",
кеш: верно,
dataType: "text",
данные: {html: имя},
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();
}
}
Что еще мне нужно проверить?