Bonjour,

J'ai un gros problème en utilisant l'ajax de Jquery et le MVC3.

Code JS :

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

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

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
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.

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