2013-07-03 171 views
1

所以我有一個.NET MVC項目與從Ajax POST調用更新控制器,可能需要很長時間才能運行,這會導致超時異常。在ajax POST請求長時間超時問題

當我調試它在我的本地機器上運行良好,但是 - 當我把它發佈到我的蔚藍的網站,並從那裏請求從未成功完成,Chrome的控制檯報告更新:

POST http://mysiteaddress/Admin/UpdateLibrary/Update?Length=13 504 (Proxy Timeout (This operation returned because the timeout period expired.)) 

嘗試的在Firefox遠程桌面相同的操作導致控制檯報告:

[07:42:13.856] POST http://mysiteaddress/Admin/UpdateLibrary/Update?Length=13 **[HTTP/1.1 502 Bad Gateway 182940ms]** 

我已經盡我的web.config文件中設置一個長超時

<httpRuntime executionTimeout="2000"/> 

和我的Ajax調用

$.ajax({ 
     url: this.action, 
     type: 'POST', 
     data: $(this).serialize(), 
     success: function (data) { 
      document.write(data); 
     }, 
     failure: function (XMLHttpRequest, textStatus, errorThrown) { 
       console.log(XMLHttpRequest); 
       console.log(textStatus); 
       console.log(errorThrown); 
     }, 
     timeout: 2000000 //Milliseconds 
    }); 

,但沒有喜悅的身體內。

回答

2

所以這不是一個真正的解決方法,而是一種解決方法。而不是做一個長的請求我有我的JavaScript反覆查詢一個ActionResult返回一些JSON決定我的長時間運行的過程是否完成。完成後,我將瀏覽器重定向到結果屏幕。

$.updateProgressbar = function() { 
     $.get('@Url.Action("GetStatus", "UpdateLibrary", new { countryId = countryId }, Request.Url.Scheme)', function (data) { 
      $('#progressbar').progressbar('value', data.progress) 
      if (data.currentItem != null) { 
       $('#currentWorkItem').text('@l12.View_Update_currentlyWorking' + data.currentItem); 
     } 
      if (data.progress == 100) { 
       window.location = 
        '@Url.Action("UpdateResults", "UpdateLibrary", new { countryId = countryId }, Request.Url.Scheme)'; 
      } else { 
       setTimeout($.updateProgressbar, 5000); 
      } 
     }); 
    }; 

    $(function() { 
     $("#progressbar").progressbar({ value: 0 }); 
     setTimeout($.updateProgressbar, 5000); 
    }); 
+0

很好的解決方法:) –

1

它看起來像你的本地網絡外部天青網站,你要通過代理/網關服務器出去。貴公司是否有任何阻止列表或白名單列出可能攔截和阻止請求的允許/禁止網站?

+0

你說得對,我通過代理進行連接。我們的服務器上似乎沒有任何黑名單。我確實進入了我們的服務器設置,並將Web請求的默認連接超時更改爲更長。這將其轉換爲我在遠程桌面上收到的相同錯誤 - '無法加載資源:服務器響應狀態爲502(錯誤網關)' –