C #: Решение проблем с тайм-аутом HttpWebResponse - PullRequest
3 голосов
/ 17 марта 2010

У меня большая проблема с данными, которые я пытаюсь загрузить в свое приложение через Интернет через HttpWebResponse. Мой код выглядит так:

myWebRequest.Timeout = 10000; 

using (HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse())
{
     using (Stream ReceiveStream = myWebResponse.GetResponseStream())
     {
         Encoding encode = Encoding.GetEncoding("utf-8");
         StreamReader readStream = new StreamReader(ReceiveStream, encode);
         // Read 1024 characters at a time.
         Char[] read = new Char[1024];

         int count = readStream.Read(read, 0, 1024);

         int break_counter = 0;
         while (count > 0 && break_counter < 10000)
         {
             String str = new String(read, 0, count);
             buffer += str;
             count = readStream.Read(read, 0, 1024);
             break_counter++;
         }
    }
}

Этот код выполняется в нескольких случаях в отдельных потоках, поэтому его немного сложно отладить. Проблема в том, что этот метод застрял, и я виню в этом плохую связь с данными.

Как видите, я уже установил тайм-аут и надеялся, что код просто завершится после истечения времени ожидания. Это не! По крайней мере, не всегда. Иногда я получаю WebException / Timeout, но несколько раз он просто зависает.

Что такое тайм-аут? Когда это называется? Допустим, HttpWebResponse начинает получать данные, но он застрял где-то в середине передачи. Получу ли я тайм-аут? Для меня это выглядит так, будто я этого не делаю, потому что мое приложение застряло и исключение тайм-аута не возникает.

Что я могу сделать, чтобы исправить это или как получить дополнительную информацию о том, что здесь происходит не так?

1 Ответ

12 голосов
/ 17 марта 2010

Попробуйте установить Свойство HttpWebRequest.ReadWriteTimeout

Количество миллисекунд до время записи или чтения. значение по умолчанию составляет 300 000 миллисекунд (5 минут).

...