C# Cómo establecer HttpClient Keep-Alive en false

Tuve una baja en el rendimiento problema con las solicitudes HTTP .NET. La solicitud GET HTTP a una API REST en el localhost tomó cerca de 500 ms para completar. Me pasé un montón de tiempo para arreglarlo. He tratado de muchas maneras: HttpClient, HttpWebRequest, WebClient y RestSharp. Ninguna de ellas funciona. La mayoría de las soluciones en la Internet, dijo a establecer Proxy parámetro para null pero todavía no funciona más rápido.

La única manera que he encontrado para reducir este tiempo es para establecer el Keep-Alive parámetro de solicitud falsa:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Esto funciona muy bien. El tiempo se reduce de 7 a 10 ms. Pero ahora en algunas de las razones que tengo que usar HttpClient en lugar de HttpWebRequest. Y no puedo encontrar la manera para establecer Keep-Alive a false para HttpClient. Lo único que he encontrado es cómo se establece en true al establecer una “conexión” de cabecera “Keep-Alive”.

Estoy usando este código para registrar solicitud por 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);

Y todavía toma alrededor de 500-600 ms para completar.

stackoverflow.com/questions/15211812/… … es solo una idea …
Gracias, este es un primer eslabón en el resultado de búsqueda de Google. Ya he probado esto: contenido.Los encabezados.Add(“Keep-Alive”, “falso”); Pero esto toma más de 500 ms para completar demasiado.

OriginalEl autor Vaskrol | 2016-04-01

5 respuestas

  1. 25

    Cuando se establece HttpWebRequest.KeepAlive = true el encabezado set es Connection: keep-alive

    Cuando se establece HttpWebRequest.KeepAlive = false el encabezado set es Connection: close

    Por lo que tendrá

    _http.DefaultRequestHeaders.Add("Connection", "close");

    OriginalEl autor Jerry Joseph

  2. 7

    Utilizar este código para deshabilitar HTTP Keep-Alive en el cliente:

    _http.DefaultRequestHeaders.ConnectionClose = true;

    De esta forma se establecerá Connection encabezado de solicitud close.

    OriginalEl autor Pavel Chuchuva

  3. 2

    Ver el código a continuación:

    HttpClient cli;
    ...
    cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
    cli.DefaultRequestHeaders.Add("Keep-Alive", "600");
    No funciona. He actualizado una pregunta con mi código.
    La muestra se publicó que “las grandes obras” es el equivalente de KeepAlive=False. El encabezado en el que el estado ha intentado es el equivalente de KeepAlive=True. Usted está haciendo lo contrario de lo que usted necesita hacer.

    OriginalEl autor Riad Baghbanli

  4. 0

    Espero que esto te puede ayudar, he probado

    _client.DefaultRequestHeaders.Connection.Add("Keep-Alive");

    OriginalEl autor Xiaoliang Sha

  5. 0

    Escribí HttpClientHandler, y en el controlador justo antes de la solicitud que elimina el encabezado de “Conexión”. En este caso, se establece el valor predeterminado es “Connection: keep-alive”. Incluso si antes de que usted lo puso en el HttpClient por defecto, establezca las propiedades, etc. Revise sus controladores.

    OriginalEl autor Anton Ilyin

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *