2011-08-03 178 views
1

我正在使用jquery向可能需要一段时间返回的控制器方法发出ajax请求。我遇到的问题是,我无法重新加载页面,直到ajax请求完成..它只是挂起,直到控制器方法完成,然后重新加载页面。长时间运行ajax请求,防止页面重新加载

这是我的ajax请求。

$.ajax({ async:true, type: "POST", url: url, data: senddata, dataType: "xml", success: GetLayerFeaturesCallback }); 

我正在使用一个AsyncController并等待10秒钟返回。

public void GetFeaturesAsync(int layerId, BoundingBox bbox, int maxFeatures = 50) 
    { 
     AsyncManager.OutstandingOperations.Increment(); 
     Task task = Task.Factory.StartNew(() => { 
      System.Threading.Thread.Sleep(10000); 
     }); 
     task.ContinueWith(t => { 
      AsyncManager.Parameters["element"] = new XElement("TEST"); 
      AsyncManager.OutstandingOperations.Decrement(); 
     }); 
    } 

    public XmlActionResult GetFeaturesCompleted(XElement element) 
    { 
     return new XmlActionResult(element); 
    } 

为什么我不能重新加载页面,直到该方法完成?

回答

0

可能是您的应用程序中的死锁,或者允许处理的线程或连接数(每个ip)受Web服务器限制。

当长请求正在处理时,您是否可以从其他浏览器或其他计算机打开任何其他页面?

编辑 asp.net中的会话也会导致锁定。除非您已将页面的会话标记为只读,否则一次只能有一个请求访问会话。

+0

代码位于本地IIS中,只有一个浏览器实例打开。我没有触及Session ..上面的代码是我正在做的唯一的事情。 – mdm20

+2

即使只有一个浏览器击中它,请求也不会停止,直到完成为止。 IIS不会检测到您取消了ajax请求并继续等待所有10秒。如果你在<%@ Page声明中有EnableSessionState =“True”,会话就不会被触及,而是锁定会话。 – aero

相关问题