У меня есть 2 приложения MVC, которые необходимо подключить к третьему приложению.Код, вызывающий проблемы, идентичен в обоих приложениях 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 сообщает localhost: 55094 обновить данные в БД.GetServerUpdateProgress возвращает счетчик результатов / общее количество, чтобы я мог отобразить индикатор выполнения для обновления базы данных.
$ .ajax, который запускает UpdateServerData, настроен на работу async: true
Затем с помощью setTimeoutsЯ запускаю GetServerUpdateProgress каждые несколько секунд, который показывает, насколько далеко UpdateServerData от завершения.
Функциональность рабочего приложения: 
Не работает:

Так что, по-видимому, в нерабочей версии происходит то, что она не запускает GetServerUpdateProgress, даже если ajax вызывает функцию, она фактически не начинает обрабатывать что-либо внутри нее до тех пор, пока UpdateServerData не будет завершен.Вы можете видеть, что синхронизация ajax установлена правильно, потому что анимация загрузки отображается для обоих на нерабочем снимке экрана.Я ставлю точку останова в начале GetServerUpdateProgress, и она даже не срабатывает, пока не закончится обработка UpdateServerData.
Моя главная проблема заключается в том, что некоторые настройки, возможно, в webconfig или global.asax, отличаются и чтоэто то, что заставляет оба этих приложения работать немного по-разному.Любые идеи?
Вот некоторые из связанных JavaScript:
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);
}
});
}