веб-звонки никогда не заканчиваются - PullRequest
4 голосов
/ 24 февраля 2011

У меня есть несколько приложений, использующих различные веб-технологии, такие как SOAP, WCF Services или просто простой XmlReader.Однако все они, похоже, сталкиваются с одной и той же проблемой: пропустить тайм-аут и бесконечно зависать, если интернет-соединение испытывает проблемы в неподходящее время.

Я установил тайм-аут во всех сценариях на небольшое значение, например, для wcf

closeTimeout="00:00:15" openTimeout="00:00:15" 
receiveTimeout="00:00:15" sendTimeout="00:00:15"

или для мыла

_Session.Timeout = (int)TIMEOUT.TotalMilliseconds;

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

Я рассматривал возможность запуска таймера при каждом вызове и использования соответствующей функции .Abort(), если время таймера истекает для отмены вызова.Однако мне было интересно, есть ли более простой способ исправить проблему и убедиться, что время ожидания истекло.

Кто-нибудь знает, почему это происходит, и если да, то каким чистым / простым / хорошим способом является обеспечениевремя ожидания звонка?

1 Ответ

4 голосов
/ 24 февраля 2011

Я могу догадаться, на , почему это происходит, но без решения: (

I подозреваю , что это зацепило разрешение DNS. Я виделразличные ситуации, когда это «не в счет» - например, когда это происходит в инициирующем потоке асинхронного вызова или когда оно определенно не включено в таймауты.

Если вы можете воспроизвести этовытащив сетевой кабель, я бы предложил использовать Wireshark, чтобы подтвердить мои предположения - это, по крайней мере, предложило бы дополнительные пути для расследования. Может быть, где-то в стеке .NET есть тайм-аут DNS, который обычно бесконечен, но его можно настроить дляпример.

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