none
request.GetRequestStream lento RRS feed

  • Domanda

  • Ciao a tutti,

    Eseguo questo codice (metodo PUT) per ottenere un token di accesso da un sistema remoto

    request = WebRequest.Create(uri)
                ServicePointManager.UseNagleAlgorithm = False
                ServicePointManager.Expect100Continue = False
                ServicePointManager.ServerCertificateValidationCallback = Function(sender, certificate, chain, sslPolicyErrors) True
                request.ContentLength = jsonDataBytes.Length
                request.ContentType = contentType
                request.Method = method
    
                Using requestStream = request.GetRequestStream
                    requestStream.Write(jsonDataBytes, 0, jsonDataBytes.Length)
                    requestStream.Close()
    
                    Using responseStream = request.GetResponse.GetResponseStream
                        Using reader As New StreamReader(responseStream)
                            response = reader.ReadToEnd()
                        End Using
                    End Using
                End Using
    
    

    Per funzionare funziona, ma ottiene la risposta in circa 12/15 secondi (dal debug di visual studio 2017 su Chrome e Windows 10) mentre con lo stesso Json da postman la risposta è praticamente immediata.

    La pausa è su:

    Using requestStream = request.GetRequestStream


    Sempre nella mia app uso quest'altro codice  (Metodo Get) che dà risultati immediati

    Dim Uri As New Uri(String.Format("https://XXXXXXXX, "443"))
                Dim request As WebRequest
    
                request = WebRequest.Create(Uri)
                request.PreAuthenticate = True
                request.Headers.Add("Authorization", "Bearer " + token)
    
                Dim myWebResponse = request.GetResponse()
    
                Dim responseStream = myWebResponse.GetResponseStream()
    
                Dim myStreamReader = New StreamReader(responseStream, Encoding.UTF8)
                Dim json = myStreamReader.ReadToEnd()
    
                responseStream.Close()
                myWebResponse.Close()
    
                Return json
    Suggerimenti?

    Ho letto un po' di cose in giro, tipo sull'eliminazione della ricerca del proxy, ma senza risultati.


    Grazie
    Paolo


    domenica 25 luglio 2021 20:30

Tutte le risposte

  • Aggiungo che nel mio put ci sono solo pochissimi byte: nome utente, password e una sigla.
    Nella risposta anche c'è praticamente solo il token.
    domenica 25 luglio 2021 21:47
  • Buongiorno Paolo,

    Succede solo su un singolo computer o su diversi? 


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    lunedì 26 luglio 2021 07:10
    Moderatore
  • Sono ancora in fase di sviluppo e ho provato solo dal mio notebook con Windows 10 e Visual Studio 2017.
    Utilizzo anche una VPN abbastanza lenta, ma come scritto Postman è immediato....

    Postman propone questo codice semplicissimo in C# ma io non ci leggo alcuna indicazione utile, e voi?

    Il body ovviamente è lo stesso.

    Var client = new RestClient("https://XXXXXXXXXX");
    client.Timeout = -1;
    var request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "application/json");
    var body = @"{
    " + "\n" +
    @"    ""ApiKey"": ""XXXXXXXXXXXXX"",
    " + "\n" +
    @"    ""TokenMode"": ""trusted"",
    " + "\n" +
    @"    ""SourceApplication"": ""XXXXXXXX"",
    " + "\n" +
    @"    ""TrustedUserName"": ""XXXXXXXX"",
    " + "\n" +
    @"    ""TrustedPassword"": ""XXXXXXXXX"",
    " + "\n" +
    @"    ""Username"": ""XXXXXXXXXXX""
    " + "\n" +
    @"}";
    request.AddParameter("application/json", body,  ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);
    Console.WriteLine(response.Content);
    

    lunedì 26 luglio 2021 12:46