Вызовы jQuery Ajax к веб-сервису кажутся синхронными
У меня есть два ajax-вызова к веб-сервису из jquery.
Первый звонок (GetMessages
) начинает интервал в JavaScript (setInterval
) и возвращает строковый массив сообщений, хранящихся в переменной сеанса.
Второй звонок (UploadUsers
) загружает пользователей и сохраняет статус в сеансе для возврата в методGetMessages
, Поэтому UploadUsers добавляет сообщения в сеанс, а GetMessages извлекает сообщения и отображает их для клиента.
Проблема в том, что хотя я вызываю оба метода асинхронно,GetMessages
ждет покаUploadUsers
закончен. Он просто загружается.
Я даже помещаю thread.sleep между каждым добавляемым пользователем, и я ожидаюGetMessages
return «добавлено 1/10 пользователей», «добавлено 2/10 пользователей», каждый по отдельности.
Что происходитGetMessages
ничего не возвращает, покаUploadUsers
заканчивается, а затем приносит весь текст сразу.
У меня есть много кода, поэтому я не знаю, что поставить, но здесь это идет:
UploadUsers.aspx
callAsynchMethod('ClientStatusHandler.asmx/GetMessages',
'', printMessages, stopPollingError);
callAsynchMethod('ClientStatusHandler.asmx/StartRetrievingLeads',
data, stopPolling, stopPollingError);
Site.js
function callAsynchMethod(url, keyValue, callBack, callBackError) {
$.ajax({
type: "POST",
url: url,
data: keyValue,
contentType: "application/json; charset=utf-8",
success: callBack,
error:callBackError
});
}
ClientStatusHandler.asmx.cs
const string key = "LUMessages";
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod(EnableSession = true)]
public string[] GetMessages()
{
if (Session[key] != null)
{
string[] messages = ((IList<string>)Session[key]).ToArray();
((IList<string>)Session[key]).Clear();
return messages;
}
return new string[] { };
}
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod(EnableSession = true)]
public string[] UploadUsers()
{
//This function adds a user and calls SaveMessageToQueue
//for every user.
//I see the message being entered into the session and
//I call Thread.Sleep(10000)
//between messages.
}
private void SaveMessageToQueue(string m)
{
IList<string> messageQueue = (List<string>)HttpContext.Current.
Session["LUMessages"];
messageQueue.Add(m);
}