net from example consumir consume asp c# jquery asp.net ajax web-services

c# - from - Las llamadas jQuery Ajax al servicio web parecen ser síncronas



web service ajax jquery (1)

Esto se debe a que tiene habilitada la sesión y la sesión bloquea todas las llamadas hasta que regresen.

También puede leer esta pregunta: Reemplazar la sesión de ASP.Net por completo

también lea: https://stackoverflow.com/a/3660837/159270

Tengo dos llamadas ajax a un servicio web de jquery.

La primera llamada ( GetMessages ) inicia un intervalo en javascript ( setInterval ) y devuelve una matriz de cadena de mensajes almacenados en una variable de sesión.

La segunda llamada ( UploadUsers ) carga usuarios y guarda el estado en la sesión que se devolverá en el método GetMessages . Entonces UploadUsers agrega mensajes a la sesión y GetMessages recupera los mensajes y los muestra para el cliente.

El problema es que aunque llamo a ambos métodos de forma asincrónica, GetMessages espera hasta que UploadUsers finalice. Simplemente carga.

Incluso puse un thread.sleep entre cada usuario que se agrega y espero que GetMessages devuelva "1/10 usuarios se han agregado", "se han agregado 2/10 usuarios", cada uno en llamadas separadas.

Lo que sucede es que GetMessages no devuelve nada hasta que UploadUsers finaliza y luego trae todo el texto a la vez.

Tengo un montón de código, así que no sé qué poner, pero aquí va:

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); }