Function apps avertissement
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
Code:
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
} |
Aussi c'est pour vous dire que dans Azure Emulator , cette directive fonctionne !
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 !
Code:
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");
}
} |
Coté client :
Code:
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);
} |
Merci de ne pas mettre une valeur trop haute dans la ligne for (int i = 0; i<4;i++).
Plus grave : Rien sur Google .... personne n'est au courant !