J'ai un appel JQuery AJAX pour ASP.NET WebMethod.JQuery AJAX appel à WebMethod multi-thread
Je comprends le async: true
qui permet à la page Web de ne pas être verrouillé jusqu'à ce que la fonction retourne et donc je l'ai mis à 'true'
.
Le problème que je suis confronté est que la méthode interne GetVersionFromDataBase()
à l'intérieur de la GetVersion()
prend beaucoup de temps jusqu'à ce qu'il se termine, et pendant ce temps l'ensemble du backend est verrouillé (un seul thread).
L'expérience de l'utilisateur est que pour l'autre utilisateur qui navigue sur le site, même sur des pages différentes, leur écran est verrouillé jusqu'à ce que la méthode «lourde» retourne.
Comment puis-je rendre la fonction GetVersionFromDataBase()
dans un thread/des tâches différents?
$.ajax({
type: "POST",
url: "Default.aspx/GetVersion",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (result) {
alert('the version is:' + result.d);
}
});
public partial class Default : System.Web.UI.Page
{
[WebMethod]
public string GetVersion()
{
string version = GetVersionFromDatabase(); // this is a heavy method freezes the program till it finishes
return version;
}
}
Quand vous dites le « backend ensemble est verrouillé (un seul thread) », voulez-vous dire ce qui se passe dans un environnement de production dans IIS? Ou cela se passe-t-il dans votre serveur Web de développement? Chaque requête doit être traitée par IIS de manière asynchrone. – Rob
Rob, ça se passe sur mon serveur web de développement. J'ai ouvert un nouvel onglet pendant que la méthode était invoquée et que tout le site se bloque. pensez-vous qu'il va agir différemment sur IIS de production? – user829174
Dans mon expérience, cela n'arrive que dans le serveur de développement. Voir ce post: http://stackoverflow.com/questions/9036150/asp-net-development-server-concurrent-processing-doesnt-work – Rob