Asynchronous ASP.Net:IHTTPassynchandler和iRequestSessionState不工作
我已经实现了一个IHTTPassynchandler。我正在从一个有小部件的网页向该处理程序发出大约5个不同的AJAX调用 其中一个小部件加载大约需要15秒(因为有一个大型数据库查询),其他小部件应在一秒钟内全部加载。处理程序以同步方式响应 我得到的结果非常不一致。ProcessRequest方法使用会话和其他类级变量这是否会导致不同的请求使用相同的线程,而不是各自的线程? 我得到这个 请求1--->响应1秒Asynchronous ASP.Net:IHTTPassynchandler和iRequestSessionState不工作,asynchronous,ihttpasynchandler,Asynchronous,Ihttpasynchandler,我已经实现了一个IHTTPassynchandler。我正在从一个有小部件的网页向该处理程序发出大约5个不同的AJAX调用 其中一个小部件加载大约需要15秒(因为有一个大型数据库查询),其他小部件应在一秒钟内全部加载。处理程序以同步方式响应 我得到的结果非常不一致。ProcessRequest方法使用会话和其他类级变量这是否会导致不同的请求使用相同的线程,而不是各自的线程? 我得到这个 请求1--->响应1秒 请求2--->响应14秒 请求3--->响应14.5秒 请求4--->响应15秒 请求
请求2--->响应14秒
请求3--->响应14.5秒
请求4--->响应15秒
请求5--->响应15.5秒
但我在找更像这样的东西 请求1--->响应1秒
请求2--->响应14秒
请求3--->响应1.5秒
请求4--->响应2秒
请求5--->响应1.5秒
在不发布太多代码的情况下,我对IHTTPassynchandler方法的实现是相当标准的
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);
}
在我的IHTTPassynchandler.BeginProcessRequest方法中放置一个调试断点,我可以看到直到最后一个进程完成后才触发该方法
我的machine.config也有这个条目。。。
processModel autoConfig=“true”,未设置其他属性
我这样给处理者打电话…$.ajax( { 键入:“获取”, url:“../HTML/HtmlHandler.ashx”, 是的, 数据类型:“文本”, 数据:{html:name}, 成功:函数(html){ //$(函数(){ //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();
}
}
错误:函数(XMLHttpRequest、textStatus、errorshown){
$(“#”+name+“holder”).html(“检索小部件时出错”);
//日志(“错误:+tabname”);
//checkAllLoaded();
}
}
我还需要检查什么?您这里的问题可能不是您的服务器代码。javascript的本质是它是同步的。即使您使用异步AJAX请求,我发现javascript也很少允许您同时发出两个HTTP请求。以防万一其他人有此问题将iRequiresessionState更改为IReadOnlySessionState时出现的问题为我解决了此问题