Я использую метод HttpWebResponse.BeginGetResponse () для отправки запроса на мой сервер. Для запроса AllowReadStreamBuffering установлено значение false , поэтому данные не будут буферизироваться. В уведомлении «Запрос завершен» я делаю следующее (без кода обработки ошибок):
HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result);
BinaryReader streamReader = new BinaryReader(response.GetResponseStream());
try
{
while ((readSize = streamReader.Read(buffer, 0, buffer.Length)) > 0)
{
...
}
}
catch (Exception)
{ // NEVER GET HERE!!
...
}
Моя проблема в том, что я не могу обнаружить ошибки соединения во время чтения данных из потока (во время цикла while). Поведение очень странное: оно завершает чтение всех данных, которые ОС имеет в кэше, а затем возвращает «readSize = 0», как в случае «конца потока».
Я ожидал, что streamReader.Read () сгенерирует исключение IOException , но это не !
Я пытался найти где-нибудь флаг fail , но кажется, что его нет (Stream / BinaryReader / HttpWebResponse). Пожалуйста, помогите!
Я проверил это, используя три сценария, и у всех было одинаковое поведение:
- Использование соединения USB между телефоном и ПК
- Телефон подключен к Интернету через ПК через USB-соединение
- После нескольких успешных вызовов streamReader.Read () я отключаю сетевую карту ПК
- Использование WIFI-соединения
- Телефон подключен к интернету через WIFI
- После нескольких успешных вызовов streamReader.Read () я выключаю WIFI-маршрутизатор
- Использование WIFI-соединения
- Телефон подключен к Интернету через WIFI-соединение
- После нескольких успешных вызовов streamReader.Read () я удаляю кабель WAN (поэтому он не имеет доступа к Интернету).
Спасибо!
Михай