Итак, я настроил IIS8.5 на Win 8.1, вот так:
appcmd.exe set config -section:system.applicationHost/webLimits /connectionTimeout:"00:00:03" /commit:apphost
Я проверил, что настройки применены.
Я сделал IISRESET (в отчаянии), но этот параметр, похоже, игнорируется.
Если я подключаюсь к IIS через Telnet и не отправляю никакого контента, я не отключаюсь через 3 секунды, как ожидалось.
Я фактически начал все это, пытаясь заставить это работать:
appcmd.exe set config -section:system.applicationHost/webLimits /headerWaitTimeout:"00:00:30" /commit:apphost
то есть, чтобы он отключил меня после того, как не отправил все заголовки через 30 секунд. Это тоже не сработало - оставайся на связи столько, сколько захочу.
Я читал документы (http://www.iis.net/configreference/system.applicationhost/weblimits) и вполне уверен, что семантика верна.
Почему не применяется лимит?
Спасибо.
Прежде всего, я обнаружил, что вам действительно нужно выполнить HTTP-запрос, чтобы получить тайм-аут соединения, например, для входа.
telnet <webserver> 80
GET / HTTP/1.0
Connection: keep-alive
Как только это будет установлено, я обнаружил, что system.applicationHost / webLimit / connectionTimeout не работает, но system.applicationHost / sites / [Веб-сайт по умолчанию] / limits / connectionTimeout работает нормально. Его можно настроить через консоль IIS или с помощью appcmd.exe следующим образом:
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].limits.connectionTimeout:00:00:03" /commit:apphost
https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/limits
Документация на
http://www.iis.net/configreference/system.applicationhost/weblimits
говорит:
Каждые 60 секунд рабочий процесс проверяет, как долго он простаивал. Если его текущее время простоя больше, чем значение тайм-аута простоя, указанное службой активации процессов Windows (WAS), рабочий процесс инициирует завершение работы.
Теперь, когда процесс проверяет каждые 60 секунд, тогда - ах - 3 или 30 секундный тайм-аут не имеет смысла, потому что в любом случае он проверяется только каждые 60 секунд. В любом случае это не имеет особого смысла, поскольку позволяет обходить попытки поддержки активности HTTP 1.1, чтобы избежать накладных расходов на повторное установление.