Наше приложение включает веб-службу ASP.Net, которая должна иметь дело только с несколькими клиентами. Таким образом, ограничение в 10 входящих подключений в Windows XP Pro обычно не является проблемой. Однако на одном конкретном сервере соединения иногда застревают в состоянии CLOSE_WAIT. Эти соединения со временем накапливаются, и в конечном итоге новым клиентским соединениям отказывают, поскольку максимальное количество соединений исчерпано.
Судя по моему поиску в Google, это звучит так, как будто неспособность веб-сервиса правильно закрыть соединение может вызвать эту проблему, но, поскольку он отлично работает на сотнях других машин с Windows XP pro, я не вижу, что это ошибка в нашем коде. Он также работал нормально на пораженной машине до тех пор, пока со стороны конечного пользователя не произошли некоторые махинации (я думаю, что они приступили к удалению дублирующихся файлов, чтобы уменьшить использование своего диска, но они не совсем поняли это).
Что мог изменить пользователь, чтобы вызвать эту проблему? Есть ли способ заставить соединения, находящиеся в CLOSE_WAIT, отключаться по тайм-ауту, а не позволять им зависать? Я видел предложения по сокращению TcpTimedWaitDelay, но это относится только к состоянию TIME_WAIT, и его изменение не имело никакого эффекта.
Подобная проблема обычно связана с кодом, связанным с объектами, которые необходимо закрыть и удалить, но ваша история предполагает, что это не в этом случае. Я бы проверил тайм-аут вашего соединения на вкладке «Веб-сайт» для этого веб-сайта. По умолчанию 120 секунд. Если он был поднят, он может поддерживать больше соединений, чем на других ваших машинах.
Также проверьте журналы IIS, чтобы узнать, нет ли у вас необычного трафика. Если у вас есть боты или что-то еще, посещающее ваш сайт чаще, возможно, вы достигли лимитов подключения раньше, чем раньше.