2011-10-04 6 views
3

세 번째 응용 프로그램에 연결해야하는 MVC 응용 프로그램이 2 개 있습니다. 문제를 일으키는 코드는 두 MVC 앱에서 동일합니다.

public bool UpdateServerData() 
    { 
      //string BASE_URL = "http://"; 
      string BASE_URL = "http://localhost:55094"; 
      string url = BASE_URL + "/Home/PullLiveData"; 
      WebRequest wr = WebRequest.Create(url); 
      wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user 
      var response = (HttpWebResponse)wr.GetResponse(); 
      return true; 
    } 

    public ActionResult GetServerUpdateProgress() 
    { 
      //string BASE_URL = "http://"; 
      string BASE_URL = "http://localhost:55094"; 
      string url = BASE_URL + "/Home/UpdateProgress"; 
      WebRequest wr = WebRequest.Create(url); 
      wr.Credentials = CredentialCache.DefaultNetworkCredentials; // uses current windows user 

      var myobj = new UpdateAJAXProgress(); 
      var response = (HttpWebResponse)wr.GetResponse(); 
      var reader = new StreamReader(response.GetResponseStream()); 
      JavaScriptSerializer js = new JavaScriptSerializer(); 
      var objText = reader.ReadToEnd(); 
      myobj = (UpdateAJAXProgress)js.Deserialize(objText, typeof(UpdateAJAXProgress)); 
      return Json(myobj); 
     } 

UpdateServerData는 db의 데이터를 새로 고치려면 localhost : 55094에 지시합니다. GetServerUpdateProgress는 진행 빈도/총계를 반환하므로 DB 새로 고침을위한 진행률 표시 줄을 표시 할 수 있습니다. 나는 완료 얼마나 멀리 UpdateServerData 함께 반환 GetServerUpdateProgress 몇 초마다 실행, 그리고 사용 setTimeouts

사실 : UpdateServerData를 실행

은 $ 아약스는 비동기 작동하도록 설정되어 있습니다.

작업 응용 프로그램의 기능 : enter image description here

작동하지 않음 :

enter image description here

그래서 무슨 일이 비 작업 버전에서 발생하는 것으로 보인다는 아약스 호출하더라도이 GetServerUpdateProgress 실행되지 않는 것입니다 UpdateServerData가 완료 될 때까지 실제로 내부에서 아무 것도 처리하지 않습니다. 작동하지 않는 스크린 샷에서 로딩 애니메이션이 모두 표시되므로 Ajax 동기화가 올바르게 설정되었는지 확인할 수 있습니다. GetServerUpdateProgress의 시작 부분에 중단 점을 넣었고 UpdateServerData가 처리를 마칠 때까지 트리거하지 않습니다.

나의 주요 관심사는 아마도 webconfig 또는 global.asax의 일부 설정이 다르다는 것인데, 이는이 두 가지 앱이 조금 다르게 실행되는 원인입니다. 어떤 아이디어?

은 여기에 관련된 자바 스크립트의 일부입니다 :

function UpdateData() 
{ 
     $("#ChartUpdateProgressWhole").show(); 

    $.ajax({ 
     type: "POST", 
     async: true, 
     url: '@(Url.Action("UpdateServerData", "Charts"))', 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      Alert2({ 
       iconfilename: "tick.png", 
       text: "Database Updated!", 
       autohide: true, 
      }); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 

     }, 
     complete:function (jqXHR, textStatus) { 
      $("#ChartUpdateProgressWhole").hide(); 
      timerStop = true; 
      LoadChart(); 
     }, 
    }); 

    if (!timerStop) { 
     CheckProgress(); 
     } 
} 
function CheckProgress() 
{ 
    if(timerStop) { 
     CheckProgressAjax(); 
     return; 
    } 
    window.setTimeout(CheckProgress, 2000); 
    CheckProgressAjax(); 
} 

function CheckProgressAjax() 
{ 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: '@(Url.Action("GetServerUpdateProgress", "Charts"))', 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      var width = (data.Completed * 100)/data.Total; 
      $("#ChartUpdateProgressPercent").css("width", width); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert(XMLHttpRequest.status); 
      alert(XMLHttpRequest.responseText); 
     } 
    }); 
} 

답변

3

여기 어둠 속에서 자상의 비트를 복용을하지만, ASP.NET은 실제로 비동기 요청을 대기하고 세션 상태가 활성화 된 경우에 (순서대로 처리합니다 의심의 여지없이 동기화 문제를 다루지 않아도 됨). 그것을했다

[SessionState(SessionStateBehavior.Disabled)] 
public class SomeController 
+1

, 댄 :

나의 제안은 가능하면이 다음과 같은 속성을 사용하여 컨트롤러 당을 해제 할 수 수없는 경우, 모두 함께 세션 상태를 사용하지 않도록하는 것입니다! 고맙습니다! 당신이 행동에 여분의 U를 가지고 알아낼 내게 가져 갔어 : P – Robodude

+0

굉장 :) 도와 줘서 고맙게도 그 사람은 나도 한 동안 너무 곤란하게했다 ... 미안 해요, 오스트 레일 리아 맞춤법 : P는. 이제 해결되었습니다. –

관련 문제