HttpWebRequest вызывает значительную задержку при отключении заголовка Expect100Continue

При отключении заголовка Expect100Continue для HttpWebRequests, исходящего из моего клиента, размещенного в WCF, путем добавления следующего в раздел настроек файла конфигурации:

ServicePointManager.Expect100Continue=false 

Я заметил, что клиент ждет около 150 миллисекунд между отправкой HTTP-запроса POST и следующего TCP-пакета, который содержит фактическую полезную нагрузку.

Любая подсказка, почему это могло происходить? Это неожиданно, потому что при отключении этого заголовка я ожидаю, что полезная нагрузка будет отправлена ​​сразу после первоначального запроса без задержки.


person Emad    schedule 02.06.2011    source источник
comment
Сколько данных вы публикуете? Какова спецификация целевого сервера - т.е. марка и версия? Можете ли вы получить трассировку wirehark? Это поможет понять, что происходит.   -  person feroze    schedule 03.06.2011


Ответы (1)


Таким образом, оказывается, что .NET по умолчанию использует алгоритм Naggle для группировки фрагментированной полезной нагрузки для повышения эффективности TCP. Это вызывало задержку, чтобы избавиться от этой задержки, мы должны были установить:

ServicePointManager.UseNaggleAlgorithm=false.                       

Это изменяет задержку со 150 миллисекунд до нескольких миллисекунд.

person Emad    schedule 07.06.2011