我已经实现了一个IHttpAsyncHandler。我正在从一个具有小部件的网页调用大约5个AJAX调用到该处理程序。
其中一个小部件大约需要15秒才能加载(因为有一个大型数据库查询),其他部件都应该在1秒内加载。处理程序以同步方式进行响应。
我得到的结果不一致。ProcessRequest方法使用会话和其他类级变量。会不会导致不同的请求使用相同的线程而不是每个线程都有自己的?
我要把这个..。
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( { 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();
}
},我还需要检查什么?
发布于 2010-03-29 16:23:47
为了防止其他人有这个问题,将IRequiresSessionState改为IReadOnlySessionState为我解决了这个问题。
发布于 2010-03-26 19:43:09
您的问题可能与服务器代码无关。javascript的本质是它是同步的。即使在使用异步AJAX请求时,我也发现javascript很少允许您同时发出两个HTTP请求。
https://stackoverflow.com/questions/2526168
复制相似问题