C # Comment définir HttpClient Keep-Alive sur false
J'ai eu un faible rendement problème avec les requêtes HTTP sur .NET. La demande HTTP GET à une API REST sur le localhost a pris environ 500 ms pour terminer. J'ai passé beaucoup de temps pour y remédier. J'ai essayé de nombreuses façons: HttpClient
HttpWebRequest
WebClient
et RestSharp
. Aucune de ces travaux. La plupart des solutions sur Internet, a déclaré à définir Proxy
paramètre null
mais cela ne fonctionne toujours pas plus rapide.
La seule façon que j'ai trouvée pour réduire ce temps d'attente est de définir le Keep-Alive paramètre de la demande pour de faux:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Cela fonctionne très bien. Le temps est réduit à 7 à 10 ms. Mais maintenant, dans certaines raisons, j'ai besoin d'utiliser HttpClient
au lieu de HttpWebRequest
. Et je ne trouve pas comment définir Keep-Alive " à false pour HttpClient
. La seule chose que j'ai trouvé est de savoir comment l'activer par la définition d'une "connexion" en-tête "Keep-Alive".
Je suis en utilisant ce code pour la requête POST par HttpClient:
HttpClient _http = new HttpClient();
_http.DefaultRequestHeaders.Accept.Clear();
_http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new StringContent(
request, Encoding.UTF8, "application/%appname%+xml");
content.Headers.ContentType.Parameters.Add(
new NameValueHeaderValue("type", "payload"));
HttpResponseMessage response = await _http.PostAsync(uri, content);
Et encore, il faut environ 500-600 ms pour terminer.
source d'informationauteur Vaskrol
Vous devez vous connecter pour publier un commentaire.
Lorsque vous définissez
HttpWebRequest.KeepAlive = true
l'en-tête set est Connection: keep-aliveLorsque vous définissez
HttpWebRequest.KeepAlive = false
l'en-tête set est Connection: closeDe sorte que vous aurez besoin
Voir code ci-dessous:
Utiliser ce code pour désactiver HTTP Keep-Alive sur le client:
Ce sera mis en
Connection
en-tête de demandeclose
.