2011-08-03 14 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サーバーによって制限されている可能性があります。

長いリクエストが処理されている間に、別のブラウザまたは別のコンピュータから他のページを開くことはできますか?

edit asp.netのセッションでもロックアップが発生します。ページのセッションを読み取り専用としてマークしない限り、一度に1つのリクエストのみセッションにアクセスできます。

+0

コードはローカルIISでホストされており、ブラウザインスタンスが1つだけ開いています。私はセッションに触れていない。上のコードは私がやっている唯一のものです。 – mdm20

+2

ブラウザが1台しかない場合でも、要求が完了するまで要求は停止しません。 IISは、ajaxリクエストをキャンセルしたことを検出せず、すべての10秒間待機するように継続します。あなたが<%@ Page宣言でEnableSessionState = "True"を持っていれば、セッションはロックされるか、セッションがロックされるかのいずれかに触れる必要はありません。 – aero

関連する問題