Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
Здравствуйте, Tora-Bora, Вы писали:
TB>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
Здравствуйте, Tora-Bora, Вы писали:
TB>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд
IMHO, для "энергичной работы" 120 с — это большой таймаут.
TB>Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
Уверены, что именно по таймауту? М.б., проблема в том, что куча сокетов висит в TIME_WAIT? Это как раз было бы нормально при интенсивном подключении/отключении. Текст ошибки можно увидеть?
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, Tora-Bora, Вы писали:
TB>>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд HL>IMHO, для "энергичной работы" 120 с — это большой таймаут.
Ну не знаю, обычно все быстрее обрабатывается. А что, это может повлиять?
TB>>Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему. HL>Уверены, что именно по таймауту? М.б., проблема в том, что куча сокетов висит в TIME_WAIT? Это как раз было бы нормально при интенсивном подключении/отключении. Текст ошибки можно увидеть?
Ошибка по-моему такая: System.WebException The operation has timed out.
KeepAlive в false стоит. Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть?
request.KeepAlive = false;
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Tora-Bora, Вы писали:
TB>>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
L>Ты из Питера?
Здравствуйте, Tora-Bora, Вы писали:
TB>>>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
L>>Ты из Питера?
TB>Нет, а что?
Я недавно устраивался в контору и столкнулся ровно с такой же задачей. Формулировка практически один в один. Если найдешь решение, было бы интересно узнать о нем.
Здравствуйте, Tora-Bora, Вы писали:
TB>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть?
Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Tora-Bora, Вы писали:
TB>>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть? GZ>Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).
Не совсем понял. То-есть если у меня начались таймауты, я выставляю ConnectionLeaseTimeout = 0, а потом, при первом удачном соединении ставлю обратно значение?
Здравствуйте, Tora-Bora, Вы писали:
TB>Здравствуйте, GlebZ, Вы писали:
GZ>>Здравствуйте, Tora-Bora, Вы писали:
TB>>>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть? GZ>>Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).
TB>Не совсем понял. То-есть если у меня начались таймауты, я выставляю ConnectionLeaseTimeout = 0, а потом, при первом удачном соединении ставлю обратно значение?
Насколько я помню достаточно сделать:
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Tora-Bora, Вы писали:
TB>>Здравствуйте, GlebZ, Вы писали:
GZ>>>Здравствуйте, Tora-Bora, Вы писали:
TB>>>>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть? GZ>>>Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).
TB>>Не совсем понял. То-есть если у меня начались таймауты, я выставляю ConnectionLeaseTimeout = 0, а потом, при первом удачном соединении ставлю обратно значение? GZ>Насколько я помню достаточно сделать: GZ>
Здравствуйте, Tora-Bora, Вы писали:
TB>Проблема в следующем:
TB>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
HttpWebRequest при соединении ищет настройки прокси — задайте их явно или укажите req.Proxy = null;