2016-01-28 4 views
1

Я исправляю ошибку: приложение будет висеть в процессе загрузки в течение 5 минут при потере сетевого подключения. То, что мне нужно сделать, - уменьшить время зависания до 20 секунд.Как реализовать свойство readtimeout времени

журнал сниппет:

Severe 2016-01-27 , 11:03:14 
    在 HttpsDownload.doDownloadByHttps(FileDownloadInfo fileInfo, downloadingDelegate downDelegate) 
    Message: Init method:GET 

Info 2016-01-27 , 11:08:29 
    在 HttpsDownload.writeToFile(FileDownloadInfo fileInfo, Stream stream, downloadingDelegate downDelegate, Boolean Clear) 
    Message: Exception while reading from the response stream 
    Exception: 
     Message: time out 
     Type: System.Net.WebException 
      在 System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
    在 HttpsDownload.writeToFile(FileDownloadInfo fileInfo, Stream stream, downloadingDelegate downDelegate, Boolean Clear) 

фрагмент кода:

private void doDownloadByHttps(FileDownloadInfo fileInfo, downloadingDelegate downDelegate) 
     { 
       //code 
       webResponse = (HttpWebResponse)webRequest.GetResponse(); 
       responseStream = webResponse.GetResponseStream(); 
       writeToFile(fileInfo, responseStream, downDelegate, bClear); 
     } 
private void writeToFile(FileDownloadInfo fileInfo, Stream stream, downloadingDelegate downDelegate, bool Clear) 
     { 
       int count = stream.Read(readBuffer, 0, BlockSize); 
       while (count > 0) 
       { 
        //code 
        count = stream.Read(readBuffer, 0, BlockSize); 
       } 
     } 

Я считаю, что тайм-аут происходит в stream.Read в соответствии с бревна. Поэтому самый простой способ сделать трюк должен быть stream.ReadTimeout = 20000, но, очевидно, я не могу установить свойство ReadTimeout. Другой способ, который может думать о том, чтобы написать класс переопределения ReadTimeOut как:

public class MyStream : Stream { 
//code 
public override int ReadTimeout { get; set; } 
//code 
} 

Но это не является предпочтительным. Любой лучший способ исправить ошибку?

ответ

1

Тайм-аут должен быть установлен в объекте webRequest, типа HttpWebRequest.

Проверьте это: https://msdn.microsoft.com/en-US/library/system.net.httpwebrequest.readwritetimeout(v=vs.110).aspx

+0

Черт человек, я должен просто сказать «работает как шарм»: =) –

+0

@ little.ming маркировка мой ответ в качестве ответа достаточно :) – Andrew

 Смежные вопросы

  • Нет связанных вопросов^_^