Повисание HttpWebRequest соединений
От: Tora-Bora  
Дата: 01.04.11 04:48
Оценка:
Проблема в следующем:

Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.
Re: Повисание HttpWebRequest соединений
От: Lloyd Россия  
Дата: 03.04.11 17:50
Оценка: :)
Здравствуйте, Tora-Bora, Вы писали:

TB>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.


Ты из Питера?
Re: Повисание HttpWebRequest соединений
От: HowardLovekraft  
Дата: 04.04.11 05:46
Оценка:
Здравствуйте, Tora-Bora, Вы писали:

TB>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд

IMHO, для "энергичной работы" 120 с — это большой таймаут.

TB>Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.

Уверены, что именно по таймауту? М.б., проблема в том, что куча сокетов висит в TIME_WAIT? Это как раз было бы нормально при интенсивном подключении/отключении. Текст ошибки можно увидеть?
Re[2]: Повисание HttpWebRequest соединений
От: Tora-Bora  
Дата: 04.04.11 10:50
Оценка:
Здравствуйте, 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;
Re[2]: Повисание HttpWebRequest соединений
От: Tora-Bora  
Дата: 04.04.11 10:52
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Tora-Bora, Вы писали:


TB>>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.


L>Ты из Питера?


Нет, а что?
Re[3]: Повисание HttpWebRequest соединений
От: Lloyd Россия  
Дата: 04.04.11 13:32
Оценка:
Здравствуйте, Tora-Bora, Вы писали:

TB>>>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.


L>>Ты из Питера?


TB>Нет, а что?


Я недавно устраивался в контору и столкнулся ровно с такой же задачей. Формулировка практически один в один. Если найдешь решение, было бы интересно узнать о нем.
Re[3]: Повисание HttpWebRequest соединений
От: GlebZ Россия  
Дата: 04.04.11 15:08
Оценка: 29 (2)
Здравствуйте, Tora-Bora, Вы писали:

TB>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть?

Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).
Re[4]: Повисание HttpWebRequest соединений
От: Tora-Bora  
Дата: 05.04.11 07:38
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Tora-Bora, Вы писали:


TB>>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть?

GZ>Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).

Не совсем понял. То-есть если у меня начались таймауты, я выставляю ConnectionLeaseTimeout = 0, а потом, при первом удачном соединении ставлю обратно значение?
Re[5]: Повисание HttpWebRequest соединений
От: GlebZ Россия  
Дата: 05.04.11 08:28
Оценка:
Здравствуйте, Tora-Bora, Вы писали:

TB>Здравствуйте, GlebZ, Вы писали:


GZ>>Здравствуйте, Tora-Bora, Вы писали:


TB>>>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть?

GZ>>Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).

TB>Не совсем понял. То-есть если у меня начались таймауты, я выставляю ConnectionLeaseTimeout = 0, а потом, при первом удачном соединении ставлю обратно значение?

Насколько я помню достаточно сделать:
servicePoint.ConnectionLeaseTimeout = 0;
servicePoint.ConnectionLeaseTimeout = -1;

Но 100% не даю. Пробуй...
Re[6]: Повисание HttpWebRequest соединений
От: Tora-Bora  
Дата: 01.06.11 09:39
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Tora-Bora, Вы писали:


TB>>Здравствуйте, GlebZ, Вы писали:


GZ>>>Здравствуйте, Tora-Bora, Вы писали:


TB>>>>Но судя по всему действительно есть какой-то пул коннекшенов, где бы это посмотреть?

GZ>>>Есть такой пул коннектов. Нужно получить через ServicePointManager.FindServicePoint ServicePoint для своего коннекта. Там есть ServicePoint.CurrentConnections — сколько коннектов открыто. А также есть — ServicePoint.ConnectionLeaseTimeout. Выставляешь его в ноль, то все коннекты должны закрываться. Только не забудь потом выставить время, или -1(вечно).

TB>>Не совсем понял. То-есть если у меня начались таймауты, я выставляю ConnectionLeaseTimeout = 0, а потом, при первом удачном соединении ставлю обратно значение?

GZ>Насколько я помню достаточно сделать:
GZ>
GZ>servicePoint.ConnectionLeaseTimeout = 0;
GZ>servicePoint.ConnectionLeaseTimeout = -1;
GZ>

GZ>Но 100% не даю. Пробуй...

Попробовал, безрезультатно
Re: Повисание HttpWebRequest соединений
От: Аноним  
Дата: 02.06.11 10:28
Оценка:
Здравствуйте, Tora-Bora, Вы писали:

TB>Проблема в следующем:


TB>Приложение энергично работает с сервером: постоянно создаются и закрываются куча соединений, в разных потоках. Таймаут на соединения не большой — 120 секунд. В какой-то момент, из-за проблем на сервере, он перестает отвечать, все соединения отваливаются по таймату. Потом сервак восстанавливается, но соединения продолжают отваливаться по таймауту, до тех пор, пока не будет перезагружено приложение. Только перезагрузка решает проблему.


HttpWebRequest при соединении ищет настройки прокси — задайте их явно или укажите req.Proxy = null;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.