2016-02-18 4 views
0

Как узнать, используются ли мои HTTP-соединения при тестировании с помощью консольного приложения C# с использованием HttpClient?Как узнать, работает ли соединение: keep-alive?

Я отправляю правильные заголовки (согласно Fiddler), но тайминги идентичны независимо от того, посылаю ли я заголовок Connection: keep-alive или нет.

Мне любопытно узнать, всегда ли он работает (даже без заголовка) или всегда не рабочий.

Мой код, чтобы установить его следующим образом (и я повторно использовать тот же экземпляр каждый раз):

if (String.IsNullOrEmpty(client.DefaultRequestHeaders.Connection.ToString())) 
    { 
     client.DefaultRequestHeaders.Add("Connection", "keep-alive"); 
    } 

Как и в сторону: я не могу видеть более простой способ, чтобы установить этот заголовок напрямую - вы можете добавить к нему только Add(). Это означает, что если вы дважды вызовете метод, вы получите «keep-alive, keep-alive» в качестве значения!

+3

Путь к старому школьнику должен состоять в том, чтобы запустить * Wireshark * и посмотреть на сетевое соединение. Если все передано в одном потоке TCP, все в порядке. Если несколько соединений с целевым сервером открыты, они не соблюдают «Connection: keep-alive», но это очень маловероятно, если вы запрашиваете стандартный веб-сервер, например Apache, nginx, IIS и т. Д. Вы можете видеть только производительность вы можете использовать это для действительно большого количества файлов. –

ответ

0

Я нашел самый простой способ использовать тайминги и явно отключить его, чтобы получить ссылку. Версия .net HttpClient, похоже, автоматически использует соединение по умолчанию, пока удаленный сервер отправляет правильный заголовок в свой ответ.

Однако, если вы явно настроили заголовок соединения на «закрыть», удаленный сервер закроет соединение. После этого все тайминги были медленнее на 200 мс для каждого запроса, доказав, что keep-alive работает нормально все время.

Смежные вопросы