Silverlight ClientHttp Тайм-аут веб-запроса - PullRequest
5 голосов
/ 29 марта 2011

У меня есть приложение silverlight 4, использующее стек ClientHttp для создания веб-запроса, который обслуживает двоичный поток. Затем я читаю из этого потока и делаю вещи. Однако у меня есть следующая проблема: сервер буферизирует данные, которые он отправляет, так что процесс отправки похож на send-pause-send-pause-send ...

Иногда сервер занимает немного более длительную паузу (около 20 секунд), после чего соединение кажется каким-то образом обрывается. Я не получаю никаких исключений в Silverlight, на самом деле к коду он выглядит так, как будто чтение из потока веб-ответов завершилось нормально (то есть больше нет данных). Однако на самом деле сервер не отправил все свои данные (что я могу протестировать из приложения не-Silverlight, которое получит больше данных после этой паузы). Я думаю, это может быть проблема с тайм-аутом (которую я не могу явно установить в Silverlight), но странно, что у меня нет исключения, указывающего тайм-аут. Кроме того, пауза не такая длинная, я ожидаю, что 20сек будет разумным временем.

Я также посмотрел на трафик TCP и похоже, что после паузы Silverlight отправляет сообщение FIN на сервер. Таким образом, кажется, что он как бы истекает и решает разорвать соединение, но на самом деле он не сообщает о тайм-ауте как об исключении и не дает мне никакого способа его избежать.

Есть идеи, что на самом деле происходит и как я могу это предотвратить?

Спасибо!

ОБНОВЛЕНИЕ: обнаружена проблема. Существует раздел реестра, который управляет общесистемным поведением тайм-аута веб-запроса, и некоторые приложения устанавливают его на 10 секунд (например, Install Anywhere) и «забывают» когда-либо устанавливать его обратно. Ключ заключается в следующем: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ReceiveTimeout

Я вернул его на большее значение, и теперь оно работает отлично! Hth.

1 Ответ

0 голосов
/ 24 января 2012

Просто цитирую ОП, но отвечаю:

ОБНОВЛЕНИЕ: обнаружена проблема. Существует раздел реестра, который управляет общесистемным поведением тайм-аута веб-запроса, и некоторые приложения устанавливают его на 10 секунд (например, Install Anywhere) и «забывают» когда-либо устанавливать его обратно. Ключ заключается в следующем: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ReceiveTimeout

Я вернул его на большее значение, и теперь оно работает отлично! Hth.

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