ASP.Net:IHttpAsyncHandler和IRequiresSessionState不起作用

时间:2010-03-26 19:33:03

标签: asynchronous ihttpasynchandler

我已经实现了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();
    }
}

我还需要检查什么?

2 个答案:

答案 0 :(得分:3)

只是因为其他人有这个问题,将IRequiresSessionState更改为IReadOnlySessionState为我解决了这个问题。

答案 1 :(得分:-1)

您的问题可能与您的服务器代码无关。 javascript的本质是它是同步的。即使您使用异步AJAX请求,我发现javascript很少允许您同时发出两个HTTP请求。