Ошибка подключения к сокету - PullRequest
1 голос
/ 12 января 2010

Я сталкиваюсь с проблемой странного соединения с сокетом в приложении .net windows. Я использую сокет из .net для асинхронной связи с устаревшей базой данных кэша межсистем.

У меня есть конкретное значение таймаута в приложение, когда истекает время ожидания, пользователю предлагается оставаться подключенным к приложению. Когда я говорю, оставайтесь на связи, сокет не сбрасывается.
Я установил тайм-аут на 30 минут и говорю, оставайся на связи в течение первого простоя. Затем, когда я перемещаюсь по приложению, оно работает нормально. Если без навигации в приложении и сказать, оставайтесь на связи во второй раз, и перейти в приложении, я получаю сокет "хост отказался" ошибка подключения. Это, я могу предположить, может быть сокет завершен сокет.

Но странная часть, если я установить тайм-аут приложения на 10 минут, то я также получаю ошибку сокета во второй раз. Когда я проверяю свойство подключенных сокетов, это все еще верно. Я не перехватываю исключение при вызове метода отправки сокетов. Но данные не передаются из сокета. Я проверил другой код .net. это нормально. Эта проблема также возникает редко, только 1 из 10 раз. Любые предложения будут очень полезны.

1 Ответ

2 голосов
/ 12 января 2010

Это похоже на типичную проблему, возникающую из-за брандмауэров или других настроек TCP.
Межсетевые экраны могут молча отключить соединение, если оно простаивает более x секунд.
Поскольку протокол TCP не генерирует событие в таком случае (аналогично простому удалению сетевого кабеля), настоятельно рекомендуется отправлять ping-сообщение каждые x секунд, чтобы брандмауэр оставался открытым и чтобы вы могли быть уверены, что подключены , если пропущен эхо-запрос, сервер отключает клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...