Bonjour,
J'ai un gros problème en utilisant l'ajax de Jquery et le MVC3.
Code JS :
Code VB (simplifié):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function time(time) { $.ajax({ async: true, type: "POST", dataType: "json", url: "/Connexion/Time", data: "time=" + time, success: function (data) { $("#DIV_ENTETE").append(" OK" + time); }, error: function (request) { alert("erreur"); } }); } function valider(){ $.ajax({ async: true, type: "POST", dataType: "json", url: "/Connexion/ValiderConnexion", success: function (data) { } }); }
Je lance mon site et à l'aide de firebug, j'appel les fonctions JS time(4000);time(1000); . Les deux se lancent en même temps et l'asynchrone fonctionne, la fonction de 1sec fini avant la fonction de 4sec.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Inherits System.Web.Mvc.Controller Function Time() As ActionResult Sleep(Request.Form.Item("time")) Return Json(1) End Function Function ValiderConnexion() As ActionResult System.Web.HttpContext.Current.Session("test") = "test" Return Json(1) End Function
Je fait ensuite un appel de la fonction valider(); et je relance ensuite les fonctions time(4000);time(1000); . Et la c'est le drame, l'asynchrone ne fonctionne plus. Les 2 requêtes partent en même temps, mais celle de 2sec attend que celle de 4sec soit finie pour d'exécuter.
SI je met en commentaire dans ma fonction valider côté VB l'accès en écriture à la session, l'asynchrone continu de fonctionner normalement.
Pourquoi ????
Dès que je fais une écriture dans la session, l'asynchrone ne fonctionne plus du tout.
Problème avec le serveur .NET ? Problème avec le Controller ? Problème de mauvaise utilisation du MVC ?
J'ai vu qu'il y avait un controller "AsyncController" pour MVC, c'est une piste ? J'ai fait des tests avec ça, je fait de l'asynchone en faisant des appel depuis le VB
Avec cette méthode, les deux appels de la fonction test() se font en même temps, le temps d'exécution de la requête "/Connexion/Pull" est bien de 2 sec.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 Public Sub PullAsync() AsyncManager.OutstandingOperations.Increment(2) test() test2() End Sub Public Function PullCompleted(ByVal msg As String, ByVal msg2 As String) As ActionResult Return Json(msg & msg2) End Function Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Function Time() As ActionResult Sleep(2000) Return Json(1) End Function Private ReadOnly _lock = New Object() Sub test() Dim webRequest__1 As System.Net.WebRequest = System.Net.WebRequest.Create("http://dev82:7000/Connexion/Time") webRequest__1.ContentType = "application/json" webRequest__1.Method = "POST" webRequest__1.ContentLength = 0 webRequest__1.BeginGetResponse(Sub(result) Dim webResponse = webRequest__1.EndGetResponse(result) Dim stream As New System.IO.StreamReader(webResponse.GetResponseStream()) Dim xml As String = stream.ReadToEnd() SyncLock _lock AsyncManager.Parameters("msg") = xml End SyncLock AsyncManager.OutstandingOperations.Decrement() End Sub, Nothing) End Sub Sub test2() Dim webRequest__1 As System.Net.WebRequest = System.Net.WebRequest.Create("http://dev82:7000/Connexion/Time") webRequest__1.ContentType = "application/json" webRequest__1.Method = "POST" webRequest__1.ContentLength = 0 webRequest__1.BeginGetResponse(Sub(result) Dim webResponse = webRequest__1.EndGetResponse(result) Dim stream As New System.IO.StreamReader(webResponse.GetResponseStream()) Dim xml As String = stream.ReadToEnd() SyncLock _lock AsyncManager.Parameters("msg2") = xml End SyncLock AsyncManager.OutstandingOperations.Decrement() End Sub, Nothing) End Sub
Mais le fonctionnement n'est pas du tout le même que celui que je recherche, je veux simplement de l'asynchronus avec ajax et Jquery.
Je suis bloqué....
Merci d'avance
Partager