Я реализовал IHttpAsyncHandler. Я делаю около 5 различных вызовов AJAX с веб-страницы с виджетами этого обработчика.ASP.Net: IHttpAsyncHandler и IRequiresSessionState не работают
Один из этих виджетов занимает около 15 секунд для загрузки (из-за большого запроса к базе данных) остальные должны загружаться в течение секунды. Обработчик реагирует синхронно.
Я получаю очень непоследовательные результаты. Метод 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 я могу видеть, что метод не увольняют до последнего процесс не будет завершен.
Также у меня есть machine.config ... processModel autoConfig = "true" без каких-либо других свойств.
Я звоню обработчик как это ...
$ .ajax ({ типа: "GET", URL: "../HTML/HtmlHandler.ashx", кэш: правда, 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();
}
}
Что еще мне нужно проверить?
Это неправда. – ctrlShiftBryan