Вызовы jQuery Ajax к веб-сервису кажутся синхронными - PullRequest
2 голосов
/ 29 января 2012

У меня есть два ajax-вызова к веб-сервису из jquery.

Первый вызов (GetMessages) запускает интервал в javascript (setInterval) и возвращает массив строк сообщений, хранящихся в переменной сеанса.

Второй вызов (UploadUsers) загружает пользователей и сохраняет статус в сеансе, который будет возвращен в методе GetMessages.Поэтому UploadUsers добавляет сообщения в сеанс, а GetMessages извлекает сообщения и отображает их для клиента.

Проблема заключается в том, что, хотя я вызываю оба метода асинхронно, GetMessages ждет, пока UploadUsers не будет завершен.Он просто загружается.

Я даже помещаю thread.sleep между каждым добавляемым пользователем, и я ожидаю, что GetMessages вернет "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);
         }

1 Ответ

4 голосов
/ 29 января 2012

Это потому, что вы включили сеанс, и сеанс блокирует все вызовы, пока они не вернутся.

Вы также можете прочитать этот вопрос: Полная замена сеанса ASP.Net

также читать: https://stackoverflow.com/a/3660837/159270

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...