Bonjour,
Pour ceux qui ont un abonnement Azure ,
si vous developpez dans les Function App ,
c'est pour avertir que la directive c# 'lock' ne fonctionnera pas .
Otez plutot pour une machine virtuelle.
En tout cas ca ne marche pas pour les httptrigger
Aussi c'est pour vous dire que dans Azure Emulator , cette directive fonctionne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log) { } { lock (lockcache) { //portion de code }
Vous êtes prevenues !
Merci de faire passer le message !
Pour moi j'ai perdu 4 jours de boulot !
Conclusion :
Function app fonctionne mais pas la directive 'lock' de dotnet ! au moins dans httptrigger.
Pardon j'ai la preuve ici que le lock se comporte mal !
Coté client :
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 public static class FTest { static object testlock = new object(); [FunctionName("FTest")] public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log) { string name; lock (testlock) { log.Info("C# HTTP trigger function processed a request BEGIN."); Thread.Sleep(8000); // parse query parameter //name = req.GetQueryNameValuePairs() // .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) // .Value; //if (name == null) //{ // // Get request body // //dynamic data = await req.Content.ReadAsAsync<object>(); // dynamic data = req.Content.ReadAsAsync<object>(); // name = data?.name; //} log.Info("C# HTTP trigger function processed a request END."); } return req.CreateResponse(HttpStatusCode.OK, "OK Access"); } }
Merci de ne pas mettre une valeur trop haute dans la ligne for (int i = 0; i<4;i++).
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 static void Main(string[] args) { ServicePointManager.ServerCertificateValidationCallback = (object a, System.Security.Cryptography.X509Certificates.X509Certificate b, System.Security.Cryptography.X509Certificates.X509Chain c, System.Net.Security.SslPolicyErrors d) => { return true; }; //var url = "https://progiscadap-testslot1.azurewebsites.net/api/FTest"; for (int i = 0; i<4;i++) { Thread at = new Thread(TestWeb); at.Start(); } Console.ReadLine(); } private static void TestWeb() { var url = "https://myazure-tests1.azurewebsites.net/api/FTest"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); StreamReader sr = new StreamReader(resp.GetResponseStream()); string results = sr.ReadToEnd(); results = results.Replace("\"", string.Empty); sr.Close(); Console.WriteLine(results); }
Plus grave : Rien sur Google .... personne n'est au courant !
Partager