我已经实现了IHttpAsyncHandler。我正在从一个网页上进行大约5次不同的AJAX调用,该网页包含该小部件的小部件。
其中一个小部件需要大约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方法中设置调试断点我可以看到在最后一个Process完成之前不会触发该方法。
我的machine.config也有这个条目...... processModel autoConfig =“true”,没有设置其他属性。
我正在打电话给这样的经纪人...... $就( { 类型:“GET”, url:“../ HTML / HtmlHandler.ashx”, cache:true, dataType:“text”, data:{html:name}, 成功: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();
}
}
我还需要检查什么?
答案 0 :(得分:3)
只是因为其他人有这个问题,将IRequiresSessionState更改为IReadOnlySessionState为我解决了这个问题。
答案 1 :(得分:-1)
您的问题可能与您的服务器代码无关。 javascript的本质是它是同步的。即使您使用异步AJAX请求,我发现javascript很少允许您同时发出两个HTTP请求。