M'sieurs Dames, bien le bonjour.

Après avoir fouillé sur la toile et dans ce forum, je n'arrive pas à retrouver une telle problématique, alors je vous la soumet.

Je développe en VB.NET et en client lourd (enfin, dans ce cas présent, au moins).
Je dois appeler un service Ouaib de manière sécurisée.
Pour cela, le fournisseur du service m'a gentiment donné un fichier .cer, un pfx et un mot de passe.

Je réussis à m'y connecter et à obtenir ce que je veux du service.
Cependant, à chaque "première" authentification (demande de validation du certificat), j'ai un délai de latence d'environ 15s (première = premier appel dans la session de mon application winform, si je la ferme (l'application ) et que je la relance, je retrouve ma latence).
Les appels suivants sont quasi immédiats.

Voici le bout de code qui correspond à mon pilotage.

Je n'ai pas de configuration spécifique réseau mise en place pour ce service.

Si quelqu'un(e) avait des pistes, des idées où fouiller voire même une solution, je lui serai éternellement reconnaissant !

Merci et bonne journée à vous.

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
Public Function requeteLancer(eType As eGP, sMethode As eMethodes, sParametres As String, ByRef sReponse As String) As Int32
'Initialisations 
    sReponse = String.Empty
'Construction de la requête
    Dim sService As String = _adresse & sMethode.ToString
    If eType = eGP.mGet AndAlso String.IsNullOrEmpty(sParametres.Trim) = False Then sService &= "?param=" & sParametres
    Dim laRequete As HttpWebRequest = DirectCast(HttpWebRequest.Create(sService), HttpWebRequest)
    laRequete.Timeout = 20000
'S'il y a un certificat, on l'intègre
    If String.IsNullOrEmpty(_certificat) = False Then
        Dim lePFX As New X509Certificate2(_pfx, _password, X509KeyStorageFlags.UserKeySet)
        Dim leCER As New X509Certificate2(_certificat)
        Dim leStore As New X509Store("MaBoite", StoreLocation.CurrentUser)
        leStore.Open(OpenFlags.ReadWrite)
        If leStore.Certificates.Contains(leCER) = False Then leStore.Add(leCER)
        leStore.Close()
        laRequete.ClientCertificates.Add(lePFX)
    End If
'On construit la requete
    laRequete.ContentType = "application/json"
    laRequete.Method = "GET"
    If eType = eGP.mPost Then laRequete.Method = "POST"
'On écrit les paramètres en flux, s'il y a lieu
    If String.IsNullOrEmpty(sParametres.Trim) = False Then
        If eType = eGP.mPost Then
        Dim wriRequete As IO.StreamWriter = New IO.StreamWriter(laRequete.GetRequestStream)
        wriRequete.Write(sParametres)
        wriRequete.Close()
        End If
    End If
    Dim laReponse As WebResponse = Nothing
    Dim leFlux As IO.Stream = Nothing
    'Et on la lance
    Try
        laReponse = laRequete.GetResponse() <-- C'est cet appel qui est plus ou moins lent selon le temps de validation du certificat..... ?!?!?
        leFlux = laReponse.GetResponseStream
        sReponse = New IO.StreamReader(leFlux).ReadToEnd
    Catch ex As WebException
        Dim httpReponse As HttpWebResponse = DirectCast(ex.Response, HttpWebResponse)
        If leFlux Is Nothing = False Then leFlux.Flush()
        If laReponse Is Nothing = False Then laReponse.Close()
        If httpReponse Is Nothing = False Then Return httpReponse.StatusCode
        Return 500
    End Try
'Nettoyage, etc.
    If leFlux Is Nothing = False Then leFlux.Flush()
    If laReponse Is Nothing = False Then laReponse.Close()
    laRequete = Nothing
'Si on est là, c'est que c'est bon
    Return 0
End Function