2013-07-03 1 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({ 
     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

Вы правы, я подключаюсь через прокси. На нашем сервере, похоже, нет черных списков. Я зашел в наши настройки сервера и изменил время ожидания подключения по умолчанию для веб-запросов дольше. Это превратило его в ту же ошибку, которую я получил на моем удаленном рабочем столе - «Не удалось загрузить ресурс: сервер ответил статусом 502 (Bad Gateway)' –

Смежные вопросы